GDB - адрес точки останова - PullRequest
       17

GDB - адрес точки останова

0 голосов
/ 07 ноября 2018

Я написал простой ассемблерный код, и теперь я пытаюсь отладить его с помощью gdb.

В GDB я набрал:

(gdb) break _start
Breakpoint 1 at 0x4000b0

Является ли адрес точки останова (0x4000b0) относительно места на жестком диске в строке кода? Или это только относительно длины программы? (Я думаю, что на данный момент программа еще не загружена в ОЗУ)

1 Ответ

0 голосов
/ 07 ноября 2018

Это виртуальный адрес в оперативной памяти. У вас есть исполняемый файл, зависящий от позиции , поэтому абсолютный адрес, на который будет загружен , будет прямо в метаданных ELF. (вы можете использовать readelf my_program или команду GDB info files.)

Если у вас был исполняемый файл PIE и вы установили точку останова до его запуска, GDB даст вам адрес точки останова, который еще не перемещен, поэтому первый байт файла обрабатывается как адрес 0. например,

(gdb) b main
Breakpoint 1 at 0x64e: file hello.c, line 3.
(gdb) run
Starting program: /tmp/hello

Breakpoint 1, main () at hello.c:3
(gdb) info br
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000055555555464e in main at hello.c:3
        breakpoint already hit 1 time

Обратите внимание, что 0x64e и 0x000055555555464e имеют одинаковое смещение на странице 4k, поскольку файл сопоставляется с адресом, выровненным по странице.

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