堆疊圖

雨里青山隐發表於2024-06-15

儲存引數

1.push

先執行push 2,在push1。棧從上往下(1,2是引數)

call—〉返回一個地址,並將下一個指令地址存入棧中

401171—〉函式執行完的返回地址(簡稱返回地址)

保留棧底

2.push ebp

將ebp裡的值放入了棧裡面

提升棧頂

3.mov ebp,esp

將esp裡的值放入ebp中

4.Sub esp,40

esp-四零,(四零是16進位制,一格有四個除以四,等於一零,在換算成十進位制就是16個,棧的格數就往上數16個)

esp:12fee4

儲存現場

5.Push ebx

push ebx—〉將ebx裡面的值存入棧中,esp+4

清除垃圾資料

6.Lea edi,Dword ptr ss:[ ebp 40]

取[ebp- 40]的地址編號放入edi裡面

edi變為0012f114(棧沒有發生變化

7.清資料

將eax裡面的字串放入edi指向的記憶體地址中,edi加(減)四。一共重複16次,每重複一次,ecx- 1

(rep重複)

計算(正式工作。。。

8.計算

[ebp+8]地址裡面的值放入了eax中

棧平衡

9.恢復現場

執行後

10.

11

retn——pop eip

Eip會變成401171

12.外平棧

add esp,8

相關文章