我目前正在开发操作系统。
在分页过程中,我正在创建一个页面错误处理程序。
write_cr0 :
push ebp
mov ebp, esp
mov eax, dword[ebp+8]
mov cr0, eax
pop ebp
retn
在页面错误处理程序中,将cr0寄存器中的PG位设置为使用上面的write_cr0函数关闭或打开分页。
在进程#0(空闲进程)中执行没有错误。 但, 如果shell进程创建新进程并发生页面错误, 弹出时,推入堆栈的EBP寄存器的值很奇怪。(0xffffffff)
我真的不知道为什么。请告诉我解决方案。
答案 0 :(得分:0)
推送的ebp的值是调用者中的值。如果调用者是页面错误处理程序并且它没有使用ebp,那么它仍然具有页面错误发生之前的值。