2017-10-23 8 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를 사용하지 않은 경우 페이지 폴트가 발생하기 전의 값을 유지합니다.