【发布时间】:2012-03-24 16:35:56
【问题描述】:
Linux 中是否有一个工具可以将可执行文件中的不同变量映射到相应的内存段。
例如,如果我的可执行文件中有一个已初始化的全局变量int x = 10,则该工具应显示该变量属于可执行文件的.data 段,格式类似于如下所示。
x .data
【问题讨论】:
-
你为什么这么问?为什么它对你很重要?您可以使用
nm和objdump(也许写一些awk来组合它们的输出)。 -
@BasileStarynkevitch:
objdump中有一个选项可以显示我想要的输出吗? -
不是您的格式,但
objdump -t -h可能有用(可能与nm的输出相结合)。但是你真的应该解释你为什么想要那个。将全局放入.bss或.data是恕我直言,这是构建链的实现细节。 -
@BasileStarynkevitch:好的,我会告诉你这个的必要性。假设一个人开始研究 C 程序的内存布局,他想知道哪些变量进入了哪个内存段。我就是这样的人。希望现在您了解需求。用简单的语言表达好奇心
-
全局或静态变量在未显式初始化时将进入
.bss,否则将进入.data。对于全局或静态变量显式初始化为全零的特殊罕见情况,这取决于编译器优化。
标签: linux memory-layout