2017-10-23 4 views
-1

私は現在、オペレーティングシステムを開発中です。これはなぜEBPレジスタ値ですか?

ページングのプロセスで、私はページフォルトハンドラを作成しています。ページフォルトハンドラで

write_cr0 : 
push ebp 
mov ebp, esp 
mov eax, dword[ebp+8] 
mov cr0, eax 
pop ebp 
retn 

は、オフページングまたはオンにする上記write_cr0機能を使用するためにCR0レジスタのPGビットをセットします。

プロセス#0(アイドルプロセス)でエラーなしで実行されます。 しかし、 EBPレジスタの値をスタックにプッシュ 、シェルプロセスが新しいプロセスを作成し、ページフォルトが発生した場合は、ポップ時に奇妙である。(0xffffffffに)

私は本当に理由を知りません。解決策を教えてください。

+2

なぜページフォールトハンドラの内部でページングをオン/オフする必要があるのでしょうか?それは重大な問題を引き起こす可能性があります。 –

+0

値0xffffffffが間違っていると思われる理由はありますか? – prl

+0

ページフォルトハンドラコードを表示できますか? –

答えて

0

プッシュされるebpの値は、呼び出し側の値です。呼び出し元がページフォルトハンドラで、何かのためにebpを使用していない場合、ページフォールトが発生する前の値を依然として持っています。

関連する問題