【发布时间】:2017-08-13 16:09:03
【问题描述】:
英语不是我的母语,所以如果我拼错了一些单词,对不起。我的堆栈有些麻烦,我将放在这里的所有代码都可以正常工作。
例如这个代码很简单,我理解它的堆栈。
.globl f F: 推%ebx movl 8(%esp), %eax movl 12(%esp), %ebx 添加 %ebx, %eax ret堆栈
-------- VAR Y --> ESP + 12 -------- VAR X --> ESP + 8 -------- RET --> 返回 -------- %EBX --> %ESP --------但是有了这段代码,我有一些 t
.code32 .globl f F: 推%ebx movl 8(%esp), %ebx subl $8, %esp # Creo posto nella stack per i parametri movl $1, (%esp) movl $2, 4(%esp) 打电话给 添加 %ebx, %eax addl $8, %esp #Tolgo posto nella stack 人口 %ebx ret代码完美运行,但我对此有很多疑问? %ebx 和 ret 现在在哪里?
用c翻译的asm代码:
整数 f(整数 x){ 返回 x + g(y,z); }这是我做的堆栈
堆栈
-------- 8(%esp) --> 函数 f 的 x 参数 -------- 4(%esp) --> 函数 g 的 z 参数 -------- (%esp) --> 函数 g 的 y 参数 --------所以现在的问题是 %ebx 和 ret 现在在这个堆栈上的什么位置?
【问题讨论】: