Предположим, у меня есть объектный файл 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 во время компиляции).Но я не собирался писать свой собственный анализатор объектных файлов, просто чтобы добраться до этой строки.