在iretq中解决错误

时间:2014-11-29 03:21:45

标签: assembly kernel intel

我正在尝试调试在iretq指令期间显然出错的自定义内核。我按顺序将这些数据按顺序推送到堆栈,从最近到最近(下面的所有值都是8个字节),堆栈指针的当前位置如下所示:

trapno
trapfn
err
rip     <- %rsp
cs
rflags
rsp

当我执行iretq时,我理解它会从堆栈中弹出ripcsrflagsrsp值按此顺序,并将它们放入相应的寄存器中。但是,无论出于何种原因,CPU都会跳过rip字段并从cs开始。这样,%rip具有%cs的值,而%rflags具有%rsp的值。这导致崩溃,因为%cs不包含有效的指令地址。

请注意,上面列表中位于rip上方的字段是在堆栈上分配的大型结构的一部分,然后通过将%rsp移回其开头后释放到{{ 1}}字段。我已经尝试调整移动rip的数量,但没效果。

0 个答案:

没有答案