我正在尝试在QEMU中启动自定义内核。这个内核中有一个名为ast_pending
(source)的简单函数。该函数被编译到以下汇编程序中:
pushq %rbp
movq %rsp, %rbp
movq %gs:0x0, %rax
addq $0x58, %rax
popq %rbp
retq
不知何故,当执行ret
指令时,它会尝试返回垃圾函数地址; rbp
也被删除了。有趣的是,每次运行它都是相同的地址。我怀疑堆栈或返回地址的损坏。此函数中是否有任何可能导致堆栈/ rbp
损坏的内容? (不幸的是,由于堆栈粉碎,我无法确定调用者的位置,因此我无法发布调用站点代码。)