gpt4 book ai didi

c - 处理部分 : does a declaration add also something to . 文本?如果是,它添加了什么?

转载 作者:行者123 更新时间:2023-12-01 13:25:18 25 4
gpt4 key购买 nike

我有一个像这样的 C 代码,它可能会编译到 ARM 的 ELF 文件中:

int a;
int b=1;

int foo(int x) {
int c=2;
static float d=1.5;
// .......
}

我知道所有的可执行代码都进入了 .text 部分,而 .data , .bss.rodata 将包含各种变量/常量。我的问题是:像 int b=1; 这样的行是否也在 .text 部分添加了一些内容,或者它是否只告诉编译器放置一个新的初始化变量到 .data 中的 1(然后可能在最终硬件上部署时映射到 RAM 内存中)?

此外,在尝试反编译类似的代码时,我注意到 int c=2; 等行在函数 foo() 中添加了一些内容堆栈,还有 .text 的一些行,其中实际存储了值“2”。

那么,一般来说,声明是否总是暗示在汇编级别添加到 .text 的内容?如果是,它是否取决于上下文(即变量是否在函数内部,是否是局部全局变量,......)以及实际添加了什么?

非常感谢。

最佳答案

does a line like int b=1; here add also something to the .text section, or does it only tell the compiler to place a new variable initialized to 1 in .data (then probably mapped in RAM memory when deployed on the final hardware)?

您了解这可能是特定于实现的,但很可能您只会在数据部分获得初始化数据。如果它是一个常量,它可能会进入文本部分。

Moreover, trying to decompile a similar code, I noticed that a line such as int c=2;, inside the function foo(), was adding something to the stack, but also some lines of .text where the value '2' was actually memorized there.

初始化的自动变量必须在每次进入函数范围时初始化。 c 的空间保留在堆栈上(或在寄存器中,取决于 ABI),但程序必须记住初始化它的常量,最好将其放置在文本段中的某个位置,作为常量值或作为“立即移动”指令。

So, in general, does a declaration always imply also something added to .text at an assembly level?

没有。如果静态变量被初始化为零或 null 或根本没有初始化,通常只够在 bss 中保留空间。如果静态非常量变量被初始化为非零值,它将被放入数据段。

关于c - 处理部分 : does a declaration add also something to . 文本?如果是,它添加了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48517129/

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