我正在玩弄gcc -S
以了解内存和堆栈的工作原理。在这些戏剧中,我发现了一些我不清楚的事情。你能帮我理解原因吗?
当调用函数为被调用的函数设置参数时,它
mov
会esp
改为使用push
. 不使用有什么好处push
?使用位于堆栈的参数的函数将它们指向为
ebp + (N + offset)
(其中 N 是为返回地址保留的大小)。我希望看看esp - offset
哪个更容易理解。ebp
无处不在的作为基点的理由是什么?我知道这些是平等的,但无论如何?这个魔法在开头有什么用
main
?为什么esp
必须以这种方式初始化?and esp,0xfffffff0
谢谢,