首页
社区
课程
招聘
[旧帖] [求助]为什么要多添0x40个int 3h,多此一举? 0.00雪花
发表于: 2010-11-8 11:24 1282

[旧帖] [求助]为什么要多添0x40个int 3h,多此一举? 0.00雪花

2010-11-8 11:24
1282
00401013  |.  83EC 40       sub     esp, 40
00401016  |.  53            push    ebx
00401017  |.  56            push    esi
00401018  |.  57            push    edi
00401019  |.  8D7D C0       lea     edi, dword ptr [ebp-40]
0040101C  |.  B9 10000000   mov     ecx, 10
00401021  |.  B8 CCCCCCCC   mov     eax, CCCCCCCC
00401026  |.  F3:AB         rep     stos dword ptr es:[edi]

为什么要多加64个字节的缓冲区放0x3h,而且每个函数都是加这么多,难道是怕缓冲区攻击?不解?高手能给解释一下吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (7)
雪    币: 458
活跃值: (426)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
引用<天书夜读>里的一句话解释

把局部变量区域初始化成0cccccccch。0cccccccch 实际是INT 3.这是一个中断指令。因为局部变量不可能被执行,如果执行
了必然程序有错,这时发生中断来提示开发者。这是VC 编译DEBUG 版本的特有操作。
上传的附件:
2010-11-8 13:50
0
雪    币: 179
活跃值: (26)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
这是微软工程师开发的检测缓冲区溢出的一种方法。
在Debug版本的程序中,变量之间会被填充一些0xCC,如果发生了缓冲区溢出,这些值就会被改写。而在函数结束的地方会调用一个函数检查这些值,如果被改写了就说明发生了溢出,会弹出一个对话框提示你。
2010-11-8 13:58
0
雪    币: 81
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
都是高人啊,感谢!
2010-11-8 14:33
0
雪    币: 780
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
终于明白了一点
2010-11-8 14:34
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
缘来如此啊
2010-11-10 15:26
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
汇编就是你必须考虑到每一个细节的!!!
2010-11-10 16:19
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
受教了
天书我也看了,怎么就没印象呢
2010-11-10 16:29
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册