GDB是一个自动移动的馅饼

GDB是一个自动移动的馅饼,gdb,kernel,Gdb,Kernel,我正在编写一个内核,它被编译成一个饼图。启动后,内核将自己映射到64位高内存中,特别是空页将移动到0x1fff 有什么方法可以在运行时在GDB中更改内核可执行文件的基址吗 这应该起作用: (gdb) add-symbol-file kernel_exe 0x.... # where 0x... is the relocated address of .text 嗯,add symbol file Debug/NekOS$0xffff8000010000给了我add symbol table

我正在编写一个内核,它被编译成一个饼图。启动后,内核将自己映射到64位高内存中,特别是空页将移动到
0x1fff
有什么方法可以在运行时在GDB中更改内核可执行文件的基址吗

这应该起作用:

(gdb) add-symbol-file kernel_exe 0x....  # where 0x... is the relocated address of .text

嗯,
add symbol file Debug/NekOS$0xffff8000010000
给了我
add symbol table from file“Debug/NekOS”at Value无法转换为整数。
我假设GDB对我给它的64位大addr不太满意。我将更新我的问题以指定我的意思是64位高内存而不是32位高内存。美元符号(
$
)不是命令规范的一部分。@Scoopta by
$remocated\u address
我的意思是:在此处替换重新定位的地址。在您的情况下,命令应该类似于
addsymbol file Debug/NekOS 0xffff80000100410
——注意:它应该是
.text
的位置,在文件头(如果有)之后。哦,GAS喜欢绝对值有
$
,在您的示例中,我也必须替换
内核exe
,所以我想我应该离开它。虽然这很有效,但我确实必须先运行
符号文件
来清除现有符号,否则lowmem符号将获得优先权,GDB在尝试做任何有用的事情时会非常生气,但之后一切都很好,谢谢!