4

nm. 它说

“A” 符号的值是绝对值,不会通过进一步的链接而改变。

不过,我不知道那是什么意思。如何定义变量或其他内容以使其值在 C 中是绝对值?

test.c如果我在其文件范围内声明一个变量

int a;

然后在 的输出中nm, a 的条目将在我的机器上如下所示

0000000000000004 C a

所以我想知道我该怎么做才能使nm变量的输出为“A”。而且我不知道“绝对”是什么意思。

4

1 回答 1

4

当 C 编译器编译您的程序时,除了程序的二进制代码之外,它还会生成一个符号列表。您将看到的最常见的类型是Us(表示“未定义”)、Ds 和Ss(表示全局数据)和Ts(表示“文本”段,这是可执行代码所在的位置)。

As 或绝对(不可移动)符号用于支持嵌入式开发,其中需要将事物放置在内存中的绝对地址处。通常,只有在针对嵌入式系统进行交叉编译时才会生成此类符号,使用允许您指定绝对地址的 C 语言扩展。典型的语法如下所示:

unsigned char buf[128]@0x2000;

不过,这不是标准的 C,它是嵌入式系统的扩展。buf像这样的代码会在 address产生一个绝对符号集0x2000,链接器不能移动它。

于 2015-10-25T00:00:44.273 回答