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仅仅是存取某时刻的栈顶指针,以方便对栈的操作,如获取函数參数、局部变量等。
  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/2f28/p/9751178.html
Copyright © 2011-2022 走看看