CSLab中GCC编译C函数的汇编代码参数地址求解问题
问题解答:求局部变量x的内存地址
背景信息
C函数代码:
int func(int x) { return 13 + x; }
对应的GCC汇编代码:
func: pushq %rbp movq %rsp, %rbp movl %edi, -4(%rbp) movl -4(%rbp), %eax addl $13, %eax popq %rbp ret
已知调用func前栈指针%rsp的初始值为0x7fffffffe3e0,求局部变量x对应的内存地址。
地址计算步骤
- 执行
pushq %rbp:pushq指令会将8字节的%rbp值压入栈,栈指针%rsp的值减少8,此时%rsp = 0x7fffffffe3e0 - 0x8 = 0x7fffffffe3d8。 - 执行
movq %rsp, %rbp:将当前栈指针的值赋值给基址指针%rbp,此时%rbp = 0x7fffffffe3d8。 - 汇编中
movl %edi, -4(%rbp)表示把参数x的值存入%rbp - 4指向的内存地址,这个地址就是局部变量x的存储位置。
计算该地址:0x7fffffffe3d8 - 0x4 = 0x7fffffffe3d4
综上,局部变量x对应的地址为0x7fffffffe3d4
内容的提问来源于stack exchange,提问作者compsci528
相关产品推荐
相关产品推荐

