溢出概念总结

什么是溢出?

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

于是,这就涉及到了,有符号数的大小判断。因为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课程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WTT001.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值