【问题标题】:components of a symbol name in objdump outputobjdump 输出中符号名称的组成部分
【发布时间】:2016-06-28 12:10:58
【问题描述】:

我正在尝试使用 objdump 来比较二进制文件的两个不同版本,并且想知道是否有人知道如何从我的 objdump 输出的以下行中解释符号名称:

102b33bc l     O .rodata    00000058 ThisIsMyStruct::ThisIsMyStruct()::C.24

此输出是使用以下命令生成的:

objdump -t -C -r -w --special-syms my.bin > my.bin.txt

我的问题是两个不同版本的 my.bin 有相同的行,但是一个在末尾有 C.24,另一个在末尾有 C.12。

C.# 代表什么?

谢谢!

【问题讨论】:

    标签: c++ linux elf objdump


    【解决方案1】:

    它代表您的编译器希望它代表的任何内容。 Symbol name mangling 完全是编译器特定的,甚至会随着编译器的版本而变化。就在前几天,当某些 gcc 编译器选项也导致不同的符号修饰时,我感到很惊讶。那很有趣。

    搜索http://gcc.gnu.org 似乎没有找到任何有关 gcc 名称修改的文档。一般的谷歌搜索也不是很有启发性。

    【讨论】:

    【解决方案2】:

    我的问题是两个不同版本的 my.bin 有相同的行,但是一个在末尾有 C.24,另一个在末尾有 C.12。

    不可能是你的问题:这个符号具有本地链接(l 部分),并且在定义它的目标文件之外不可见。

    该符号可能代表一些字符串文字,例如"foo\n"printf("foo\n")。也有可能在一种情况下在第 12 行定义了文字,在另一种情况下在第 24 行定义了文字(尽管这远不能保证)。

    【讨论】:

      猜你喜欢
      • 2018-08-08
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多