В GDB, как распечатать содержимое символа, который имеет специальные символы? - PullRequest
1 голос
/ 29 апреля 2020

Я сталкиваюсь с небольшой проблемой при отладке с помощью GDB. Проблема в следующем:

Когда я хочу получить адрес 'main', я могу сделать

gdb-peda$ p main
$1 = {<text variable, no debug info>} 0x400b21 <main>
gdb-peda$ x main
0x400b21 <main>:        0x000000b8e5894855

Но если я хочу получить адрес 'puts@got.plt' , это становится

gdb-peda$ x puts@got.plt
No symbol table is loaded.  Use the "file" command.
gdb-peda$ p puts@got.plt
No symbol table is loaded.  Use the "file" command.

И 'puts@got.plt' на самом деле существует.

gdb-peda$ x 0x602020
0x602020 <puts@got.plt>:        0x00000000004006e6

Я думаю, что я должен уйти от '@' и '.' так что информация 'puts@got.plt' может быть успешно распечатана, но я не знаю, как это сделать. Кто-нибудь может мне помочь?

------ 2020/05/03 отредактировано ------

Спасибо @JohnKoch, я пробовал x &'puts@got.plt', все работает.

Хотя я не могу понять, почему он не просто печатает содержимое 'puts@got.plt' при использовании x 'puts@got.plt', так что мне нужно добавить & ......

gdb-peda$ x/4gx 'puts@got.plt'
0x7ffff7a649c0 <_IO_puts>:      0x55fc894954415541      0x072ee808ec834853
0x7ffff7a649d0 <_IO_puts+16>:   0x36be6f2d8b48fffa      0x4800458bc3894800

Добавить &:

gdb-peda$ x/4gx &'puts@got.plt'
0x602020 <puts@got.plt>:        0x00007ffff7a649c0      0x00000000004006f6
0x602030 <printf@got.plt>:      0x0000000000400706      0x0000000000400716
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...