本文共 590 字,大约阅读时间需要 1 分钟。
在VC++编写的程序编程成Debug版,反汇编代码,函数入口处经常看到如下一段代码:
00EA14E0 55 push ebp
00EA14E1 8B EC mov ebp,esp 00EA14E3 81 EC C0 00 00 00 sub esp,0C0h 00EA14E9 53 push ebx 00EA14EA 56 push esi 00EA14EB 57 push edi 00EA14EC 8D BD 40 FF FF FF lea edi,[ebp-0C0h] 00EA14F2 B9 30 00 00 00 mov ecx,30h 00EA14F7 B8 CC CC CC CC mov eax,0CCCCCCCCh 00EA14FC F3 AB rep stos dword ptr es:[edi]其中主要分为3部分,最上面3行完成本函数局部变量栈空间的开辟,中间部分保存需要保护的寄存器(这部分并非必须),最后4行完成栈空间所有字节初始化为0xCC。
0xCC对应汇编代码 int 3,即软中断。
一方面,0xCC可以为某些检查提供标记();另一方面,在栈操作错误或调试汇编代码(如使用OD调试shellcode)时可以对感兴趣的逻辑进行细致的分析,这通常可以通过加入
__asm {
int 3 ; // 或 _emit 0xcc
};
来加入断点。
转载地址:http://uanbb.baihongyu.com/