Я пытаюсь использовать 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. #?
Спасибо!
Он представляет все, что хочет ваш компилятор. Название символа искажается полностью зависит от компилятора и даже зависит от версии компилятора. Буквально на днях я был удивлен, когда некоторые опции компилятора gcc также приводили к искажению символов. Это было весело.
Обыск http://gcc.gnu.org похоже не нашел никакой документации по искажению имени gcc. Общий поиск в Google тоже был не очень поучительным.
Моя проблема заключается в том, что две разные версии my.bin имеют одну и ту же строку, но у одной есть C.24 в конце, а у другой C.12 в конце.
это не могу быть вашей проблемой: этот символ имеет локальную связь ( l
часть), и не отображается за пределами объектного файла, в котором он определен.
Символ, вероятно, представляет некоторый строковый литерал, например "foo\n"
в printf("foo\n")
, Также вероятно, что литерал определяется в строке 12 в одном случае и в строке 24 в другом случае (хотя это далеко не гарантировано).