首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言地址

C语言地址
EN

Stack Overflow用户
提问于 2022-10-19 03:44:57
回答 1查看 56关注 0票数 -1

GCC编译器在CSLab上翻译了以下C函数:

代码语言:javascript
运行
复制
int func(int x) {
    return 13 + x;
}

汇编程序代码如下:

代码语言:javascript
运行
复制
    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,这是不正确的。

EN

回答 1

Stack Overflow用户

发布于 2022-10-19 15:06:07

%rsp的给定值作为0x7fffffffe3e0,我们有

代码语言:javascript
运行
复制
movq %rsp, %rbp

它将%rsp的值复制到%rbp,那么我们就有了

代码语言:javascript
运行
复制
movl -4(%rbp), %eax
addl $13, %eax

我们将一些东西复制到%eax中,并将13添加到其中,以便某些东西必须是x。这就是-4(%rbp),它转换为“存储在%rbp中的地址值之下的一个4字节的对象”。

因此,x的地址必须是0x7fffffffe3e0 - 4,或0x7fffffffe3dc

阅读您的x86程序集寻址模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74119627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档