物理メモリの場所に直接書き込もうとしているので、アセンブリ関数を使用して最初にページングを無効にし、値を書き込んでから再度ページングを有効にしていますが、なんらかの理由で、価値。
私が理解しているように、x86-32bit では、cr0 のビット 32 を反転することでページングのオンとオフが設定されるため、ここに私のアセンブリ関数を示します。
mov 4(%esp), %ecx //address
mov 8(%esp), %edx //value
mov %cr0, %eax
and $0x7fffffff, %eax
mov %eax, %cr0
mov %edx, (%ecx) //this line still triggers a page fault somehow
or $0x80000000, %eax
mov %eax, %cr0
ret
これは私がやりたいことを達成する正しい方法ですか? その場合、cr0 のビットが反転した状態でページ フォールトが引き続きトリガーされるのはなぜですか?