堆栈在函数返回时被破坏

时间:2014-12-23 02:08:29

标签: assembly kernel x86-64

我正在尝试在QEMU中启动自定义内核。这个内核中有一个名为ast_pendingsource)的简单函数。该函数被编译到以下汇编程序中:

pushq   %rbp
movq    %rsp, %rbp
movq    %gs:0x0, %rax
addq    $0x58, %rax
popq    %rbp
retq

不知何故,当执行ret指令时,它会尝试返回垃圾函数地址; rbp也被删除了。有趣的是,每次运行它都是相同的地址。我怀疑堆栈或返回地址的损坏。此函数中是否有任何可能导致堆栈/ rbp损坏的内容? (不幸的是,由于堆栈粉碎,我无法确定调用者的位置,因此我无法发布调用站点代码。)

0 个答案:

没有答案