我目前正在學習用於Intel處理器的彙編語言。 由於棧「向下增長」,爲什麼我們要以訪問特定的元素彙編寄存器esp和ebp
[ebp + 8] ;; This will access the first param
我konw我們要跳過舊的EBP值和返回地址添加,這就是爲什麼我們使用8(因爲每個長度都是4個字節)。 這有點奇怪。
而且,如果EBP是ESP備份副本,什麼是EBP的主功能 防爆值:
_start:
;; what's ebp value here ?
push eax
push ebx
call someFunction ;; this will create a stack frame
+-----------+
| param1 |
+-----------+
| param0 | <--- this is [ebp + 8] (assuming mov ebp, esp)
+-----------+
|ret_address|
+-----------+
| ebp |
+-----------+ <--- esp
而且還當我們當地人分配內存,我們必須。減去從ebp ... 請給出一個不含糊的答案。 謝謝!
main()函數與常規函數沒有區別,它也有序幕。你沒有在你的程序集片段中顯示一個,不知道爲什麼。本地人的空間是通過調整esp而不是ebp來創建的。 –
還有同樣的問題:http://stackoverflow.com/questions/1395591/what-is-exactly-the-base-pointer-and-stack-pointer-to-what-do-they-point和其他鏈接到它 – Abyx