Как записать путь к источнику из объекта - PullRequest
0 голосов
/ 27 марта 2019

Предположим, у меня есть объектный файл C app.o, скомпилированный с помощью gcc.Как я могу записать путь к файлу к исходному app.c, из которого был скомпилирован app.o.Моя цель - создать список всех символов + соответствующий путь к исходному файлу с помощью binutils и gcc toolsuite.Я ни в коем случае не ожидаю комплексного решения.Поэтому я попытался поиграть с несколькими инструментами, чтобы собрать нужную информацию.

Проверка объектного файла с помощью текстового редактора показывает, что (если исходить из большого количества нечитаемых двоичных данных) файл делает содержит ссылку на app.c в виде строки, встроенной в формат объектного файла.Однако я не нашел способа извлечь эту строку, используя objdump или nm.

Я надеялся, что objdump будет иметь какой-нибудь флаг, который может извлечь эту строку исходного файла, но после попытки практически всех опцийзадокументированный на странице man, я все еще не смог его найти.

С указанием пути к исходному файлу, я надеялся, что смогу запустить gcc -M <path-to-source>.Это позволило бы мне просмотреть все заголовки, включенные в app.c и найти объявления в исходном коде.

Предположим простой app.c, подобный этому:

void foo(void) {
}

Скомпилируйте его с помощьюgcc -c app.c -o app.o.

Выполнение objdump -t app.o выводит таблицу символов, но нигде не ссылается на исходный app.c.Запуск cat app.o показывает, что объектный файл содержит путь к файлу app.c (относительно pwd во время компиляции).Но я не собирался писать свой собственный анализатор объектных файлов, просто чтобы добраться до этой строки.

1 Ответ

0 голосов
/ 27 марта 2019

Чтобы ответить на мой собственный вопрос через несколько минут после публикации (duh!):

readelf -s app.o печатает таблицу символов, включающую имя исходного файла (app.c).После этого я могу запустить gcc -M app.c, а затем проанализировать все заголовочные файлы, чтобы собрать объявления символов.

...