首页
社区
课程
招聘
[求助]系统栈存储局部变量为什么要隔8个字节?(有截图)
发表于: 2014-4-10 10:48 4066

[求助]系统栈存储局部变量为什么要隔8个字节?(有截图)

2014-4-10 10:48
4066
VS2008 debug状态

源程序及反汇编结果:
int main()
{
013613A0  push        ebp  
013613A1  mov         ebp,esp
013613A3  sub         esp,0F0h
013613A9  push        ebx  
013613AA  push        esi  
013613AB  push        edi  
013613AC  lea         edi,[ebp-0F0h]
013613B2  mov         ecx,3Ch
013613B7  mov         eax,0CCCCCCCCh
013613BC  rep stos    dword ptr es:[edi]
        int a=100,b=150,c=200;
013613BE  mov         dword ptr [a],64h
013613C5  mov         dword ptr ,96h
013613CC  mov         dword ptr [c],0C8h
        char d[]="abc";
013613D3  mov         eax,dword ptr [string "abc" (136573Ch)]
013613D8  mov         dword ptr [d],eax

        return 0;
013613DB  xor         eax,eax
}
当前执行到最后一条语句,esp = 0x001dfd74  ebp = 0x001dfe70

系统栈:(内存)
0x001DFD74  00 00 00 00 00 00 00 00 00 e0 fd 7f cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  
0x001DFD92  cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  
0x001DFDB0  cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc
0x001DFDCE  cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc
0x001DFDEC  cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  
0x001DFE0A  cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  
0x001DFE28  cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc 61 62  
0x001DFE46  63 00 cc cc cc cc cc cc cc cc c8 00 00 00 cc cc cc cc cc cc cc cc 96 00 00 00 cc cc cc cc  
0x001DFE64  cc cc cc cc 64 00 00 00
cc cc cc cc c0 fe 1d 00 98 19 36 01 01 00 00 00 90 1b 5e 00 d0 21

1.为什么存储局部变量间要格8个字节 cc cc cc cc ?
2.
   013613A0  push        ebp  
   013613A1  mov         ebp,esp
   013613A3  sub         esp,0F0h
   013613A9  push        ebx  
之前分配系统大小为0F0h,这个分配的大小有什么依据吗?是怎么计算出来的呢?

还望高手们不吝赐教~~多谢~~~

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用来检测溢出攻击的 cc 是int 3指令
2014-4-10 10:56
0
雪    币: 2153
活跃值: (735)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
因为你是debug,release就不会。
2014-4-10 12:07
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那隔8个字节检测溢出攻击的原理是什么?
2014-4-10 12:30
0
雪    币: 917
活跃值: (1860)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
debug下检测堆栈错误的,当调试器执行到一个错误的堆栈时候会因为cc(int3)终止在该堆栈处方便查找错误
2014-4-10 14:10
0
游客
登录 | 注册 方可回帖
返回
//