VS 用 CCCCCCCC 填充栈内存是设置软中断?

在一些书里,或是论坛里,总会看到有作者把 CC 认定为是 x86 软中断(int 3)。但见作者除了发挥联想和照抄之外,似乎都不给出这个说法的确切依据。

这个说法明显很说不通。

微软使用如下常见的填充值:
ABABABAB
BAADF00D
CCCCCCCC
CDCDCDCD
DDDDDDDD
DEADDEAD
FDFDFDFD
FEEEFEEE

只看1个字节的话,这里唯独 CC 刚好与x86的某条特殊指令,即 int 3 指令的字节码相同。按此理解,填充 0xCCCCCCCC,相当于连续设置了4个断点。

问题是,这里设置断点有什么用处呢?栈内存默认是不可执行的,即便指令指针 EIP 不慎指向了栈内存,结果将是访问违规,根本用不上断点!

如果说是为了防范程序不慎先将栈内存设置为可执行的,再跳到栈内存执行,那么不妨先回答三个问题:
1,这还算是不慎吗?
2,为何不也用 0xCC 填充其它内存呢?
3,有听说谁真的经历过这种软中断吗?

另一方面,微软似乎从未声称这里的 CC 是软中断。

/GZ VC6的编译选项:用 0xCC 填充未显式初始化的局部变量的内存。
MSDN链接

这里也指出了不用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值