Интерпретация адреса в основном файле - PullRequest
0 голосов
/ 06 октября 2018

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

(gdb) where
#0 [0x000012345] in func1 + 123 (a.out + 0xABC)
#1 [0x000034345] in func2 + 567 (a.out + 0xea7)
..

Я могу скомпилировать с -g и получить точные номера строк.Но исполняемый файл в производственной среде не был бы скомпилирован с -g, и в этом случае я получаю стек, как указано выше.

Я хотел бы знать:

что представляют адреса и смещения [0x000012345], +123 и 0xABC, как их интерпретировать и как сопоставить их с номером строки вИсходный код.

Ценю любую помощь.

1 Ответ

0 голосов
/ 06 октября 2018

На большинстве архитектур просто невозможно получить хорошие данные из основных файлов без отладочной информации.Даже простые вещи, такие как разматывание стека, не будут работать.Эксперт, знакомый с архитектурой процессора и ABI, сможет определить из этого многое, но это трудоемкий ручной процесс.

В остальном ответ, я полагаю, вы используете GCC,Если вы скомпилируете свой исполняемый файл с оптимизацией и -g, GCC создаст готовые к работе двоичные файлы с отладочной информацией.Если нет ошибок компилятора (которые встречаются редко), -g не повлияет на сгенерированный код.Отладочная информация состоит из таблиц данных на стороне (и это вызывает проблемы для отладки, потому что машинный код и исходный код могут очень сильно отличаться в таких аспектах, как порядок выполнения отдельных операторов).

Если выне хотите распространять производственные двоичные файлы с отладочной информацией, вы должны все еще скомпилировать с -g, но удалите отладочную информацию с помощью strip перед распространением двоичных файлов, сохраняя при этом несвязанные двоичные файлы для своих собственных записей.При последующем анализе файла ядра вы используете эти несвязанные двоичные файлы, а не разархивированные, которые вы выдавали.Указанные в памяти смещения одинаковы для двоичных и раздетых двоичных файлов, поэтому это работает.

Для более расширенного использования можно также отделить информацию об отладке с помощью таких инструментов, как eu-strip -f, но этоне кажется необходимым в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...