Вывести значения типа структуры в GDB, используя адрес - PullRequest
0 голосов
/ 27 февраля 2019

Учитывая адрес переменной типа структуры, скажем: 0x61b2e0.Я знаю, что этот адрес указывает на структуру типа: s_a, которая определяется как

typedef struct {

int n;
char *v;

} s_a;

Как я могу напечатать значения этой структуры, поданной по известному мне адресу.

спасибо,

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Для проверки памяти вне зависимости от типа данных программы GDB предоставляет команду x с синтаксисом follow:

x/nfu addr

Здесь /nfu необязательно, где

n - сколькопамять для отображения в счетчике согласно опции u.Отрицательный знак спереди вызовет чтение с уменьшенным адресом

f - формат отображения

u - размер блока.Например, 'h' соответствуют полусловам

. Для данной структуры, чтение для двух целочисленных размеров в соответствии с вашей машиной даст содержание структуры.Первое целое число для значения n и второе для адреса указателя.Так что здесь для двух слов читать,

x/2uw 0x61b2e0
0 голосов
/ 27 февраля 2019

(gdb) p *((s_a *)(<address>)) должен помочь вам напечатать содержимое структуры, на которую ссылается <address> виртуальный адрес, т.е. в вашем случае это будет: (gdb) p *((s_a *)(0x61b2e0))

0 голосов
/ 27 февраля 2019

Вы можете использовать команду x для печати с заданного адреса.

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