1

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

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日志所说的:

在此处输入图像描述 我不知道原因。

4

1 回答 1

2

从屏幕截图看来,您IDT的 #GP 处理程序条目无效。我不确定你是如何得出坠机发生在pushl 48(%esi). 这是可能的,但这里似乎并非如此。

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

  1. 您的代码操作未初始化的数据(在寄存器或内存中)
  2. 您的代码中有竞争条件
  3. 有一个仿真错误
于 2012-05-29T19:36:14.623 回答