как можно увидеть содержимое стека с помощью GDB - PullRequest
75 голосов
/ 21 октября 2011

Я новичок в gdb, поэтому у меня возник вопрос:

  • как посмотреть содержимое стека?пример: чтобы увидеть содержимое регистра, я набираю info registers.Что касается стека, что должно быть

  • , как я могу увидеть содержимое $0x4(%esp)?Когда я набираю print /d $0x4(%esp) GDB выдает ошибку.

платформа: Linux GDB

Ответы [ 3 ]

91 голосов
/ 21 октября 2011

info frame для отображения информации стека

Чтобы прочитать память по заданным адресам, вам нужно взглянуть на x

x/x $esp для шестнадцатеричного x/d $esp для подписанного x/u $esp для беззнакового и т. Д. X использует синтаксис формата, вы также можете взглянуть на текущую инструкцию через x/i $eip и т. Д.

55 голосов
/ 06 мая 2016

Использование:

1.bt - обратная трассировка: показать функции стека и аргументы

2.info frame - показывать указатели начала / конца стека / args / locals

3.x/100x $sp - показать стековую память

(gdb) bt
#0  zzz () at zzz.c:96
#1  0xf7d39cba in yyy (arg=arg@entry=0x0) at yyy.c:542
#2  0xf7d3a4f6 in yyyinit () at yyy.c:590
#3  0x0804ac0c in gnninit () at gnn.c:374
#4  main (argc=1, argv=0xffffd5e4) at gnn.c:389

(gdb) info frame
Stack level 0, frame at 0xffeac770:
 eip = 0x8049047 in main (goo.c:291); saved eip 0xf7f1fea1
 source language c.
 Arglist at 0xffeac768, args: argc=1, argv=0xffffd5e4
 Locals at 0xffeac768, Previous frame's sp is 0xffeac770
 Saved registers:
  ebx at 0xffeac75c, ebp at 0xffeac768, esi at 0xffeac760, edi at 0xffeac764, eip at 0xffeac76c

(gdb) x/10x $sp
0xffeac63c: 0xf7d39cba  0xf7d3c0d8  0xf7d3c21b  0x00000001
0xffeac64c: 0xf78d133f  0xffeac6f4  0xf7a14450  0xffeac678
0xffeac65c: 0x00000000  0xf7d3790e
51 голосов
/ 21 октября 2011

Вам нужно использовать команды отображения памяти GDB. Базовым является x, для проверки . На связанной странице есть пример, который использует

gdb> x/4xw $sp

для печати «четырех слов (w) памяти над указателем стека (здесь $sp) в шестнадцатеричном (x)». Цитата слегка перефразирована.

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