GDB 一个自己移动的 PIE
GDB a PIE that moved itself
我正在编写一个编译为 PIE 的内核。启动后,内核将自身映射到 64 位高端内存,特别是 NULL 页面移动到 0x1FFFF << 0x2F
,然后跳转到那里,但是在这样做时 GDB 失去了对程序集附带的代码的跟踪。我失去了设置断点的能力(这样做会触发我的断点 ISR 而不是 GDB),并且被迫在我的 C 中一次执行一条指令,而 GDB 中只显示程序集。有什么方法可以在运行时更改 GDB 中内核可执行文件的基址。我正在连接到 QEMU 的 GDB 服务器进行调试。
Is there some way I can change the base address of my kernel executable in GDB at runtime
这应该有效:
(gdb) add-symbol-file kernel_exe 0x.... # where 0x... is the relocated address of .text
我正在编写一个编译为 PIE 的内核。启动后,内核将自身映射到 64 位高端内存,特别是 NULL 页面移动到 0x1FFFF << 0x2F
,然后跳转到那里,但是在这样做时 GDB 失去了对程序集附带的代码的跟踪。我失去了设置断点的能力(这样做会触发我的断点 ISR 而不是 GDB),并且被迫在我的 C 中一次执行一条指令,而 GDB 中只显示程序集。有什么方法可以在运行时更改 GDB 中内核可执行文件的基址。我正在连接到 QEMU 的 GDB 服务器进行调试。
Is there some way I can change the base address of my kernel executable in GDB at runtime
这应该有效:
(gdb) add-symbol-file kernel_exe 0x.... # where 0x... is the relocated address of .text