函数调用和堆栈
我正在阅读这本书,它说(根据这个调用约定)它是这样做的:
注意:
The function looks like this:
function( int a, int b)
The function call looks like this:
function(2, 1)
push arguments for function a and b backwards onto the stack
function is called, and ret is "placed" onto the stack
Prolog is executed
EBP is pushed onto stack
Variables local to the function are pushed onto the stack
这就是它如何告诉我堆栈看起来在这一点上:
Low Memory
b
a
Ret
EBP
array
High memory
我的问题是(因为堆栈增长了内存地址):
为什么a和b在第一个东西被推入堆栈时处于顶端? 为什么阵列在这么高的地址? 这是什么意思“向后推入堆栈”?
根据这本书,汇编语言看起来像这样:
sub 0x8, esp
sub 0x8, esp
push 0x2
push 0x1
然后在反汇编函数里面说:
push ebp
这是我真正感到困惑的地方,因为3个推命令被执行,以及如何在a和b之前放置ebp?
难怪你会把这本书扔掉。 也就是说,也许这本书没有错,但你误解了它。
你没有说出array
是什么。 假设这是被调用函数中的本地函数,堆栈可能看起来像插图,尽管混合了低和高内存。
High Memory
b
a
Ret
EBP (saved EBP of caller)
array (local variables of called function)
Low memory
链接地址: http://www.djcxy.com/p/80377.html