• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

汇编语言-堆栈平衡

汇编语言知识点 云涯 4年前 (2020-05-22) 1359次浏览

执行test(int p1,int p2)

假设执行函数前堆栈指针ESP为A

images

push p2 ;          参数2入栈,ESP =ESP- 4h —–>ESP = A – 4h
push p1 ;          参数1入栈,ESP =ESP- 4h —–>ESP = A – 8h —–>①
call test ;           压入返回地址 ESP =ESP- 4h —–>ESP = A – 0Ch —–>②

images

进入函数内
{
push   ebp                                            ;保护先前EBP指针, EBP入栈, ESP=ESP- 4h —–>ESP = A – 10h
mov    ebp, esp                                    ;设置EBP指针指向栈顶 A-10h —–>③
mov    eax, dword ptr  [ebp+0ch]       ;ebp+0ch为A-4h,即参数2的位置 —–>④
mov    ebx, dword ptr  [ebp+08h]      ;ebp+08h为A-8h,即参数1的位置 —–>⑤
sub    esp, 8                                        ;局部变量所占空间ESP-=8 —–>ESP = A-18h —–>⑥
add    esp, 8                                       ;释放局部变量, ESP+=8 —–>ESP = A-10h —–>⑦
pop    ebp                                          ;出栈,恢复EBP, ESP+=4 —–>ESP = A-0Ch —–>⑧
ret    8                                                ;ret返回,弹出返回地址,ESP+=4, ESP=A-08h —–>⑨
                                                          ;后面加操作数8为平衡堆栈,ESP+=8,ESP=A, 恢复进入函数前的堆栈.—–>⑩
}
images

云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:汇编语言-堆栈平衡
喜欢 (0)