zoukankan      html  css  js  c++  java
  • 对寄存器ESP和EBP的一些理解

     
      前言:对于经常接触逆向或者汇编的肯定都对push ebp,mov    ebp, esp这两句印象深刻,由于他们经常出现在过程的开头,这也是找段首的一个依据,但是,过程为啥总要以这两句开头,这其中又有什么道理呢?
      参考自:https://www.cnblogs.com/mengfanrong/p/5421878.html
     
    以下是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码
    push   p2    ;參数2入栈, ESP -= 4h , ESP = 0xAAAAAA6
    0xAAAAAAA - 8h =     call test    ;压入返回地址 ESP -= 4h, ESP = 0xAAAAA9D,注意:这里是test函数的。即在代码段中的地址(偏移)。
    ;//进入函数内
    push   ebp                           ;保护先前EBP指针, EBP入栈(即0xAAAAAB0入栈。注意与返回地址差别), ESP-=4h, ESP = 0xAAAAA99
    0xAAAAA99
    ;ebp+0ch为 mov    ebx, dword ptr  [ebp+08h]   ;ebp+08h为 sub    esp, 8                     ;局部变量所占空间ESP-=8, ESP = 0xAAAAA91
    add    esp, 8                     ;释放局部变量, ESP+=8, ESP = 0xAAAAA99
     即把栈中地址0xAAAAA9D的内容pop到ebp中
    0xAAAAAA2, 后面加操作数8为平衡堆栈,ESP+=8,ESP= }
    原来ESP就是一直指向栈顶的指针,而EBP仅仅是存取某时刻的栈顶指针,以方便对栈的操作,如获取函数參数、局部变量等。
  • 相关阅读:
    Xamarin Layout属性(转)
    Oracle基础
    tableViewNestTableView(tableView嵌套collectionView)
    抓包工具Fiddler的使用教程(五): 修改response的数据 .
    Web调试利器fiddler
    SQLServer光标
    SQLServer触发器
    web端功能测试总结(一)
    web功能测试
    test zlj
  • 原文地址:https://www.cnblogs.com/2f28/p/9751178.html
Copyright © 2011-2022 走看看