gpt4 book ai didi

c - 变量的值存储在 C 中的位置

转载 作者:可可西里 更新时间:2023-11-01 11:13:11 24 4
gpt4 key购买 nike

在下面的代码段中:

int func()
{
int a=7;
return a;
}

可执行文件中存放数值7的代码段是什么?或者是在数据段还是在代码段?答案取决于操作系统还是编译器?

最佳答案

每个可执行格式都有一些部分。其中之一是 text,包含汇编 - 二进制代码。其中之一是 heap,其中可以找到 malloc 编辑的数据,而 stack 是存储局部变量的地方。还有其他几个,但现在无所谓了。以上三种随处可见。

现在,像您的 a 这样的本地数据驻留在堆栈中。在可执行文件中,该值存储在 text 部分。

我在你的代码中添加了一个 main(返回 0),用 -g 编译然后执行 objdump -CDgS a.out并搜索 0x424242(我已将您的 7 替换为在代码中随机出现的可能性较小的值)。

00000000004004ec <func>:
int func()
{
4004ec: 55 push %rbp
4004ed: 48 89 e5 mov %rsp,%rbp
int a=0x42424242;
4004f0: c7 45 fc 42 42 42 42 movl $0x42424242,-0x4(%rbp)
return a;
4004f7: 8b 45 fc mov -0x4(%rbp),%eax
}
4004fa: 5d pop %rbp
4004fb: c3 retq

如您所见,c7 45 fc 42 42 42 42 表示该值存储在生成的文件中。实际上,通过 xxd 查看二进制文件时就是这种情况:

$ xxd a.out | grep 4242
00004f0: c745 fc42 4242 428b 45fc 5dc3 5548 89e5 .E.BBBB.E.].UH..

您可以在 xxd 代码段中识别上述装配线。

关于c - 变量的值存储在 C 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com