Что это за цифры в GDB? - PullRequest
0 голосов
/ 15 октября 2018

Я разбираю свой код C (просто printf ("hello world")) в gdb, и я получаю

0x0000000000001135 <+0>: push rbp 
0x0000000000001136 <+1>: mov rbp,rsp
0x0000000000001139 <+4>: lea rdi [rip+0xec4] # 0x2004
0x0000000000001140 <+11>: mov eax,0x0
0x0000000000001145 <+16>: call 0x1030 <printf@plt>
0x000000000000114a <+21>: mov eax,0x0 
0x000000000000114f <+26>: pop rbp
0x0000000000001150 <+27>: ret 

Я устанавливаю точку останова на основной и регистр копирования экзамена.

rip            0x555555555139   0x555555555139 <main+4>

Что это за цифры в шрифте <> в GDB?Я могу получить доступ только к той памяти, на которую указывает rip.

, если эти числа не являются воспоминаниями, могу ли я изменить формат отображения памяти gdb?

Извините за мой плохой английский.

1 Ответ

0 голосов
/ 16 октября 2018

Что это за цифры в шрифте <> в GDB?Я могу получить доступ только к той памяти, на которую указывает rip.

Вы имеете дело с позиционно-независимым исполняемым файлом , который связан с загрузкой по адресу 0, но равен перемещен во время выполнения на другой адрес (в вашем случае 0x555555554000).

Вы, вероятно, выполнили disas до запуска приложения (т.е. до того, как произошло перемещение),Если вместо этого вы сделаете это:

(gdb) start
(gdb) disas main

, тогда GDB покажет вам перемещенные инструкции.

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