当前位置: 首页 > news >正文

溢出概念总结

什么是溢出?

正数加正数,不可能等于一个负数,如果出现了,就是溢出。负数加负数,也不可能等于一个正数,如果出现了就是溢出。溢出的概念,只发生在有符号数。无符号数,是没有溢出这个概念的。

于是,这就涉及到了,有符号数的大小判断。因为CMP,作的是目的操作数,减去源操作数的一个减法运算。试想一下,如果目的操作数,是一个正数,而源操作数,是一个负数。那么,正数减去负数,就相当于正数加正数。

有符号数,正数的最高位,是0。但是,两个正数相加,最高位,可能溢出,变成了1。这不就出现了负数了吗。

从,目的操作数,与源操作数的符号(正负),可知,目的操作数为正数,肯定大于负数。结果为,">“,大于。

发生了溢出之后,OF=1。但SF=1(负数)。此时,OF=SF,所以是大于。

缓冲区溢出(Buffer overflow)

编写程序时没有考虑到控制或者错误控制用户输入的长度,本质就是向定长的缓冲区中写入了超长的数据,造成超出的数据覆写了合法内存区域

栈溢出(Stack overflow)

是最常见,漏洞比列最高,危害最大的二进制漏洞

在CTF PWN中往往是漏洞利用的基础

比如:

int overflow()
{char buf[8];		read(0,buf,16)
}

char buf[8];

#定义了一个char类型的个数位8的变量,所以缓冲区长度位8,

read(0,buf,16)

#但是向buf read了一个16的内容

堆溢出(Heap overflow)

堆管理器复杂,利用花样繁多

CTF PWN中的常见题型

Data段溢出(比如bss段,比较少见)

攻击效果依赖于Data段 上存放了何种控制数据

注:总结于星盟安全团队CTF-PWN课程

 


http://www.mrgr.cn/news/82116.html

相关文章:

  • 开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!
  • 25年1月更新。Windows 上搭建 Python 开发环境:PyCharm 安装全攻略(文中有安装包不用官网下载)
  • 什么是自治系统和非自治系统
  • java class类对象 加载时机
  • 基于Springboot校园失物招领系统【附源码】
  • Spring Security(maven项目) 3.0.2.3版本
  • 基于深度学习的视觉检测小项目(二) 环境和框架搭建
  • MIT Cheetah 四足机器人的动力学及算法 (I) —— 简化动力学模型
  • GeekPad 连接到VirtualBox的Ubuntu虚拟机上的Home-Assistant
  • win32汇编环境下,窗口程序中生成listview列表控件及显示
  • 使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋
  • UE5 Debug的一些心得
  • 商汤C++开发面试题及参考答案
  • Enum枚举类与静态变量和静态数组的区别
  • 单片机-LED实验
  • Edge如何获得纯净的启动界面
  • 线段树保姆级教程
  • CT 扫描显示 USB-C 电缆可能隐藏复杂的恶意硬件
  • 【paddle】初次尝试
  • C++新特性||线程协程
  • 论文实现:Reactive Nonholonomic Trajectory Generation via Parametric Optimal Control
  • 算法-判断快乐数
  • Scrapy和Selenium结合使用完整步骤
  • 物品租赁系统的设计与实现
  • C语言实现贪吃蛇游戏
  • C++新特性||线程协程(代码解析1)