У меня есть файл ядра, и у меня есть бинарный файл (C ++). Вопрос в том, что при использовании gdb для анализа файла ядра, если я попытался напечатать указатель, он выведет адрес памяти. Как только я попытался напечатать оригинальный контекст этого указателя, он говорит:
Вы не можете сделать это без процесса отладки.
Вот пример:
(gdb) p objPtr
(gdb) $1 = {px = 0x12345678}
(gdb) p *objPtr
(gdb) You can't do this without a process to debug.
Фактически, это имеет смысл, потому что файл ядра не является процессом этого двоичного файла. Но основной файл должен хранить состояние при бинарном сбое, я думаю, что должен быть способ получить исходный контекст из, скажем, указателя.
Я провел некоторое исследование по написанию скрипта Python, чтобы справиться с этим. Но, во-первых, если мы не можем сделать такое p *ptr
в GDB, как мой скрипт Python может получить объект с этого адреса памяти?
Любая ссылка или проект GitHub поможет.
Обновить:
Я обнаружил, что могу сделать:
(gdb) p *ptr.px
чтобы решить проблему у меня выше.
Но теперь мой вопрос становится, как получить .px
вещь в скрипте Python, если я хочу написать скрипт, помогающий отладке в GDB.
На самом деле найти ответ сам.
Поскольку в моем примере objPtr является указателем, вызывается что-то вроде *objPtr
считается вызывающим функцию / метод этого указателя. Правильный путь заключается в p *objPtr.px
,