Как я должен просматривать данные стека определенного адреса в GDB? - PullRequest
0 голосов
/ 25 декабря 2011

Простой исходный код c для выполнения программы:

int main ( int argc , char **argv )                                                                                                                          
{                                                                                                                                                            
        system ("XXXX");                                                                                                                           
        return 0;                                                                                                                                            
} 

Теперь скомпилируйте его и отладьте с помощью gdb, и я попытался посмотреть, какой адрес «XXX» на самом деле представляет, используя команду p, но получил пустоту, я делаю это неправильно?

enter image description here

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

Если вы хотите проверить строку, расположенную по адресу 0x40063c, используйте команду GDB examine:

(gdb) x/s 0x40063c

Обратите внимание, что эти данные не в стеке. Вы можете узнать, где эти данные, с помощью команды info symbol:

(gdb) info sym 0x40063c

(это должно напечатать что-то вроде symbol LC1 in .rodata of a.out)

1 голос
/ 25 декабря 2011

Вы не должны использовать символ $ - это часть синтаксиса сборки, но не синтаксиса GDB.
И команда "x" проще в использовании, если вы просто хотите увидеть память:

(gdb) p/s 0x40063c

Вы также можете использовать p / x для показа в шестнадцатеричном формате, и есть много других вариантов.

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