Могу ли я получить имя объекта из информации о символах в таблице символов в файле ELF? - PullRequest
2 голосов
/ 08 августа 2011

Я успешно проанализировал файл elf (исполняемый файл), скомпилированный из нескольких исходных файлов. Я могу получить привязку (локальную, глобальную, слабую), тип (объект, файл, раздел, функцию), размер символа и адрес символа вместе с именем символа (из таблицы строк).

Раздел, с которым связан символ, мне также известен.

Мой вопрос заключается в том, можем ли мы получить точное имя файла объекта (**. Obj), которое содержит символ из информации таблицы символов? Я пропускаю некоторую информацию при разборе?

1 Ответ

1 голос
/ 18 августа 2011

Вы не можете получить имя объектного файла напрямую, оно теряется при связывании. Однако, в зависимости от процесса сборки, используемого для создания исполняемого файла, вы можете вывести имя объектного файла из символов STT_FILE (например, исполняемый файл содержит символ STT_FILE с именем foo.c ->, возможно, вы можете сделать вывод, что объектный файл был foo. о).

Похоже, что символы в конкретном исходном файле следуют за символом STT_FILE с привязкой STB_LOCAL.

Из стандарта System V ABI:

STT_FILE - условно, имя символа дает имя исходного файла, связанного с объектным файлом. Символ файла имеет привязку STB_LOCAL, его индекс раздела - SHN_ABS, и он предшествует другим символам STB_LOCAL для файла, если он присутствует.

...