21、深入探讨C/C++数组、缓冲区溢出保护及相关优化

深入探讨C/C++数组、缓冲区溢出保护及相关优化

1. 代码运行异常分析

在Linux环境下运行一段汇编代码时,会出现“Segmentation fault”错误。使用GDB调试时,得到如下信息:

(gdb) r
Starting program: /home/dennis/RE/1
Program received signal SIGSEGV, Segmentation fault.
0x00000016 in ?? ()
(gdb) info registers
eax 0x0 0
ecx 0xd2f96388 -755407992
edx 0x1d 29
ebx 0x26eff4 2551796
esp 0xbffff4b0 0xbffff4b0
ebp 0x15 0x15
esi 0x0 0
edi 0x0 0
eip 0x16 0x16
eflags 0x10202 [ IF RF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
(gdb)

这些寄存器的值与win32示例中的有所不同,原因是栈布局也稍有差异。

2. 缓冲区溢出保护方法

为了防止缓冲区溢出这一问题,即使C/C++程序员可能存在疏忽,也有多种保护方法。例如,MSVC提供了以下选项:
- /RTCs :栈帧运行时检查
- /GZ :启用栈检查(/RTCs)

其中一种方法是在函数序言部分,在栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值