You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:20:37