GDB, изучить указатель на указатель - PullRequest
2 голосов
/ 23 ноября 2011

Хорошо, я пытаюсь выучить GDB. Я знаю большинство основ, но я не смог понять, как проверить указатель на указатель в oneliner. Это может быть возможно путем определения макроса / команды, но я не смог этого сделать.

Этот вопрос возник при изучении соглашения о вызовах cdecl, в котором $ esp содержал указатель на строку, передаваемый в качестве аргумента функции. Чтобы получить это, я должен был сделать следующее:

gdb$ x $esp+0x08
0xbffff6a4: 0x980eb192
gdb$ x/s 0x980eb192
0x980eb192:  "Hello world"

Итак, вопрос в том. Можно ли сделать это проще? Обрезка и вставка просто кажутся слишком медленными.

Цени любые намеки / идеи!

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

(gdb) x/s *(char**)($esp+8) может помочь.

1 голос
/ 23 ноября 2011

Вы можете повторно использовать результаты print в следующих выражениях:

(gdb) p *(void **)($esp + 4)
$4 = (void *) 0x80aec48
(gdb) x/s $4
0x80aec48:   "alabala"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...