我正在玩gcc -S
以瞭解內存和堆棧是如何工作的。在這些戲劇中,我發現了幾件事情不清楚。你能幫我理解一下原因嗎?爲什麼gcc在創建彙編代碼時這樣做?
當調用函數的參數設置爲一個名爲一個它使用
mov
到esp
,而不是push
。有什麼優勢不使用push
?函數,它的棧位於參數指向
ebp + (N + offset)
(其中N是爲返回地址保留的大小)。我期望看到esp - offset
這更容易理解。到處使用ebp
作爲基本點的原因是什麼?我知道這些是平等的,但無論如何?main
開頭的這個魔法是什麼?爲什麼esp
只能以這種方式進行初始化?and esp,0xfffffff0
感謝,
這可能是3個單獨的問題。無論如何,第三點的答案是堆棧對齊。 – Mysticial