GDB-断点地址

时间:2018-11-07 07:10:19

标签: assembly gdb

我编写了一个简单的汇编代码,现在我正尝试使用gdb对其进行调试。

在gdb中,我输入了:

(gdb) break _start
Breakpoint 1 at 0x4000b0

断点地址(0x4000b0)是否相对于代码行的硬盘存储位置?还是仅与程序长度有关? (我认为此时程序仍未加载到RAM中)

1 个答案:

答案 0 :(得分:3)

这是RAM中的虚拟地址。您有一个与位置相关的可执行文件,因此加载到的绝对地址就在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

请注意,0x64e0x000055555555464e在4k页面中具有相同的偏移量,因为文件已映射到页面对齐的地址。