逆向学习笔记-基于EBP的栈帧

来源:未知 责任编辑:责任编辑 发表时间:2013-11-15 19:49 点击:
程序的OEP,一开始以 push ebp 和mov ebp esp这两句开始。 p> 

p>原因:c程序的开始是以一个主函数main()为开始的,而函数在访问的过程中最重要的事情就是要确保堆栈的平衡,而在win32的环境下保持平衡的办法是这样的: 

p>1.让EBP保存ESP的值。

p>2.在程序运行完毕的时候调用 

p> 

p>mov esp,ebp 

p>pop ebp 

p>retn

p>或者是 

p>leave

p>retn

p>通过EBP保存程序运行前ESP的值,那么程序运行过程中,不管ESP被Push还是Pop多少次,最终都可以通过EBP还原最开始的值。

p> 

p>我们下面使用gcc编译的stackframe函数为例:

p> 

p> 

p>void stackframe(int a,int b,int c){  

p>    int x=c;  

p>    char buffer[64];  

p>    int y=b;  

p>    int z=10;  

p>    buffer[0]='A';  

p>    bar(z,y);  

p>}  

p>这个函数对应的反汇编代码如下:

p> 

p>.text:0040153C                   ; =============== S U B R O U T I N E =======================================  

p>.text:0040153C  

p>.text:0040153C                   ; Attributes: bp-based frame  

p>.text:0040153C  

p>.text:0040153C                   _text_40153C proc near        ; CODE XREF: _text_40157A  

p>.text:0040153C  

p>.text:0040153C                   var_60= dword ptr -60h        ;z  

p>.text:0040153C                   var_5C= dword ptr -5Ch        ;y  

p>.text:0040153C                   var_58= dword ptr -58h        ;buffer  

p>.text:0040153C                   var_C= dword ptr -0Ch         ;x  

p>.text:0040153C                   arg_4= dword ptr  0Ch         ;b  

p>.text:0040153C                   arg_8= dword ptr  10h         ;c  

p>.text:0040153C  

p>.text:0040153C                   push    ebp  

p>.text:0040153D                   mov     ebp, esp  

p>.text:0040153F                   sub     esp, 78h  

p>.text:00401542                   mov     eax,[ebp+arg_8]  

p>.text:00401549                   mov     [ebp+var_C],eax  

p>.text:0040154B                   mov     eax,[ebp+arg_4]  
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1