儲存引數
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