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 に答える