Почему ld, nm, objdump сообщают об отсутствии символов в этом общем объекте, когда кажется, что символы существуют? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть недокументированный общий объект, libXSAL.so , с которым я хотел бы связать.

Я написал файл частичного заголовка, содержащий нужные мне функции, с предполагаемыми сигнатурами от обратного инжиниринга с Ghidra.

gcc завершается неудачно во время соединения: undefined reference to 'function_name' для каждой из функций, которые я использую.

nm -D libXSAL.so

nm: libXSAL.so: No symbols

objdump -t libXSAL.so

libXSAL.so:     file format elf32-little

SYMBOL TABLE:
no symbols

Однако Гидра определяет имена функций, как они даны в таблице символов, и, просматривая hexdump вручную, я могу видеть их тоже.

Насколько Я могу видеть, искажение имени не под рукой ни в библиотеке, ни в моем собственном коде; библиотека, кажется, C, и мой код тоже.

Моя цель - иметь возможность ссылаться на эту библиотеку как есть.

Почему некоторые инструменты видят символы, в то время как другие нет?

1 Ответ

1 голос
/ 09 апреля 2020

Этот общий объект не имеет заголовка раздела:

libXSAL.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), invalid note alignment 0x1, dynamically linked, no section header

В соответствии со стандартом ELF:

Файлы, используемые при связывании, должны иметь таблицу заголовков разделов; другие объектные файлы могут иметь или не иметь один.

Возможно, вы сможете восстановить таблицу заголовков разделов, но удачи вам в этом.

Это было сделано намеренно (предположительно с strip) поэтому вы не можете ссылаться на файл.

Вот вариант для strip, который делает это:

  -s --strip-all                   Remove all symbol and relocation information
...