我的内核在qemu中正常运行,但在bochs中是双重错误

时间:2012-05-27 00:38:02

标签: assembly operating-system x86 kernel

我的内核在执行第一页错误时崩溃。 我的页面错误处理程序如下所示:

asm_page_error_wrapper:
    PUSHA  
    movl %esp, %esi
    pushl 48(%esi)/*esp,pusha has already been calculated*/
    pushl 32(%esi)/*error*/
    CALL page_error_interrupt
    popl %ecx
    popl %ecx
    POPA
    addl $4, %esp
    IRET

在gdb中,它崩溃在“pushl 48(%esi)”。

以下是bochs日志所说的内容:

enter image description here 我不知道原因。

1 个答案:

答案 0 :(得分:2)

从屏幕截图中可以看出,IDT对于#GP处理程序条目无效。我不确定你是如何得出崩溃的结果是pushl 48(%esi)。这是可能的,但似乎并非如此。

如果模拟器产生不同的结果,可能只有几个原因:

  1. 您的代码操作未初始化的数据(在寄存器或内存中)
  2. 您的代码中存在争用条件
  3. 有一个模拟错误