Я сталкиваюсь с небольшой проблемой при отладке с помощью 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