【发布时间】:2015-10-29 05:21:40
【问题描述】:
我们正在研究链接器在我的一门课程中的工作原理,其中一项作业是一个涉及nm 命令的小练习。本质上,我们只想匹配nm 为每个变量打印的类型和值。例如:
char* B = NULL;
将给出地址(不相关)然后 B B。我已经成功完成了除 A 之外的所有我们需要的标签。我读过这只是意味着该值是绝对的,不能被链接器更改。我已经尝试了许多组合,包括volatile、const、static、define 以及我想尝试的任何其他东西,但我目前没有想法。我在其他地方读到,这只能通过创建链接器脚本来实现,但事实并非如此,因为我的一些同行已经用 C 中的一行解决了这个问题。任何人都可以在 C 中找到一种方法输出:
some address A A
...
nm 在它的目标文件上被调用了吗?
【问题讨论】:
-
所以你要的是一个程序的 C 源代码,这样当
nm以它的编译形式运行时,输出将包含一个名为“A”的变量的地址?跨度> -
是的,我想从源代码中调用目标文件上的 nm 以输出:000000000000002a A A。但是“000000000000002a”并不重要
-
C 语言没有以任何方式解决哪个 地址分配给任何特定符号的问题,也没有解决符号重定位的问题。
nm实用程序所做的一切都超出了它的范围。特定的编译器可能会识别允许你做你想做的事情的扩展;你用的是什么编译器?
标签: c gcc linker declaration absolute