博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
debug版函数初始化入口 0xcc
阅读量:2234 次
发布时间:2019-05-09

本文共 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/

你可能感兴趣的文章
【C++】动态内存管理 new和delete的理解
查看>>
【Linux】了解根目录下每个文件的作用
查看>>
【Linux】进程的理解(一)
查看>>
【Linux】进程的理解(二)
查看>>
【C语言】深度理解函数的调用(栈帧)
查看>>
【Linux】进程的理解(三)
查看>>
【C++】带头节点的双向线链表的实现
查看>>
【C++】STL -- Vector容器的用法
查看>>
【Linux】Linux中的0644 和 0755的权限
查看>>
【数据结构】有关二叉树的面试题
查看>>
【Linux】内核态和用户态
查看>>
【Linux】HTTP的理解
查看>>
【Linux】HTTPS的理解
查看>>
【操作系统】大小端问题
查看>>
Git上传代码时碰到的问题及解决方法
查看>>
【Linux】vim的简单配置
查看>>
【C++】智能指针
查看>>
【C++】const修饰的成员函数
查看>>
【C++】面向对象的三大特性
查看>>
【C++】智能指针(后续)
查看>>