компоненты имени символа в выводе objdump

Я пытаюсь использовать 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

Решение

Он представляет все, что хочет ваш компилятор. Название символа искажается полностью зависит от компилятора и даже зависит от версии компилятора. Буквально на днях я был удивлен, когда некоторые опции компилятора gcc также приводили к искажению символов. Это было весело.

Обыск http://gcc.gnu.org похоже не нашел никакой документации по искажению имени gcc. Общий поиск в Google тоже был не очень поучительным.

0

Другие решения

Моя проблема заключается в том, что две разные версии my.bin имеют одну и ту же строку, но у одной есть C.24 в конце, а у другой C.12 в конце.

это не могу быть вашей проблемой: этот символ имеет локальную связь ( l часть), и не отображается за пределами объектного файла, в котором он определен.

Символ, вероятно, представляет некоторый строковый литерал, например "foo\n" в printf("foo\n"), Также вероятно, что литерал определяется в строке 12 в одном случае и в строке 24 в другом случае (хотя это далеко не гарантировано).

0

По вопросам рекламы [email protected]