我试图使用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.代表什么?
谢谢!
答案 0 :(得分:0)
它表示编译器想要表示的任何内容。 Symbol name mangling完全由编译器特定,甚至会随编译器的版本而变化。就在前几天,当某些gcc编译器选项也导致不同的符号重整时,我感到很惊讶。这很有趣。
搜索http://gcc.gnu.org似乎没有找到任何关于gcc名称修改的文档。一般的谷歌搜索也不是很有启发性。
答案 1 :(得分:0)
我的问题是my.bin的两个不同版本具有相同的行,但是一个在末尾有C.24而另一个在末尾有C.12。
此不能成为您的问题:此符号具有本地链接(l
部分),并且在定义它的目标文件之外不可见。
符号可能代表一些字符串文字,例如"foo\n"
中的printf("foo\n")
。文字也可能在一种情况下在第12行定义,在另一种情况下在第24行定义(虽然这远远不能保证)。