Получение значения переменной с помощью gdb в файле дампа ядра - PullRequest
0 голосов
/ 17 апреля 2020

Может кто-нибудь помочь мне понять, как определить значение переменной с помощью gdb. У меня есть бинарный файл и файл дампа ядра (у меня нет исходного кода). Я пытаюсь определить значение переменной, поэтому я попытался bt full создать полную обратную трассировку. Тем не менее, я продолжаю получать No symbol table found впоследствии. До сих пор я занимался поиском в Google, и все, что я обнаружил, - это то, что бинарный файл мог быть оптимизирован, поэтому мне нужно только go вернуться и перекомпилировать без -O; однако, как я уже говорил, у меня нет оригинального файла. Цель - найти ценность без нее. Если вы не используете gdb, есть ли какое-либо другое программное обеспечение для отладки, которое может помочь мне в этом?

Некоторые дальнейшие комментарии: я попытался перейти к указанному фрейму c и использовать info locals, который также выдает No symbol table found. Я также пытался использовать print и info locals.

1 Ответ

0 голосов
/ 18 апреля 2020

Я пытаюсь определить значение переменной

Какого вида переменной?

Для глобальных вы можете просто print a_global.

, поэтому я попытался bt full, чтобы сгенерировать полную обратную трассировку. Тем не менее, я продолжаю получать Таблицу символов не найдено.

«Таблица без символов» действительно просто говорит вам, что нет никакой отладочной информации (которая требуется для вывода значений параметр и значения локальных переменных).

У меня нет исходного кода

... и ваш двоичный файл был собран без отладочной информации.

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

...