为什么这是EBP寄存器值?

时间:2017-10-23 05:11:16

标签: assembly x86 operating-system paging osdev

我目前正在开发操作系统。

在分页过程中,我正在创建一个页面错误处理程序。

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)

我真的不知道为什么。请告诉我解决方案。

1 个答案:

答案 0 :(得分:0)

推送的ebp的值是调用者中的值。如果调用者是页面错误处理程序并且它没有使用ebp,那么它仍然具有页面错误发生之前的值。