Это виртуальный адрес в оперативной памяти. У вас есть исполняемый файл, зависящий от позиции , поэтому абсолютный адрес, на который будет загружен , будет прямо в метаданных 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, поскольку файл сопоставляется с адресом, выровненным по странице.