Как получить объект из адреса памяти в GDB с помощью Python

У меня есть файл ядра, и у меня есть бинарный файл (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.

0

Решение

На самом деле найти ответ сам.
Поскольку в моем примере objPtr является указателем, вызывается что-то вроде *objPtr считается вызывающим функцию / метод этого указателя. Правильный путь заключается в p *objPtr.px,

1

Другие решения