GCC编译器在CSLab上翻译了以下C函数:
int func(int x) {
return 13 + x;
}汇编程序代码如下:
func:
pushq %rbp
movq %rsp, %rbp
movl %edi, -4(%rbp)
movl -4(%rbp), %eax
addl $13, %eax
popq %rbp
ret我已经完成了这段代码,然后被问到以下问题:
在前面问题中显示的函数组装代码中的
,假设%rsp具有以下值
0x7fffffe3e0
与参数(局部变量) x对应的地址是什么?包括0x前缀。
(请注意,该地址有12个有效十六进制数字,或6个字节。>前两个十六进制数字的值为0。省略左边的0,如上面所示。)
我回答了0xd,这是不正确的。
发布于 2022-10-19 15:06:07
将%rsp的给定值作为0x7fffffffe3e0,我们有
movq %rsp, %rbp它将%rsp的值复制到%rbp,那么我们就有了
movl -4(%rbp), %eax
addl $13, %eax我们将一些东西复制到%eax中,并将13添加到其中,以便某些东西必须是x。这就是-4(%rbp),它转换为“存储在%rbp中的地址值之下的一个4字节的对象”。
因此,x的地址必须是0x7fffffffe3e0 - 4,或0x7fffffffe3dc。
阅读您的x86程序集寻址模式。
https://stackoverflow.com/questions/74119627
复制相似问题