2012-04-17 2 views
1

Linux에서 CR0에 쓰려고하는데, 계속 오류가 발생합니다. i386 : x86_64의 어셈블리 용입니다. 이 문제를 해결하기위한 방법이 있습니까?CR0에 쓰기위한 오류가 발생했습니다.

벨로우는 seg 오류를 설정하는 코드의 일부입니다.

mov eax,0xffffffff  ;system call number (sys_write) 
mov cr0,eax 
+2

무엇을하려하십니까? 주석에서 시스템 호출을 수행하려고 시도하는 것 같지만'0xffffffff'는'sys_write'의 숫자가 아닙니다. – Job

+0

Mem 작업을 수행 할 수 없기 때문에 0xfffffff로 eax에 썼습니다. 적어도 하나의 레지스터가 필요합니다. cr0은 레지스터 임에도 불구하고 안전한 방법으로 eax를 사용했습니다. 기본적으로 사용자 공간에서 보호 모드를 해제하고 싶습니다. 그러나 최근에 나는 cpu의 요즘이 상당히 진보되어 있으며 코드가 보호 된 세그먼트에 배치되어 해당 세그먼트에 해당 권한이없는 경우 특정 레지스터를 엉망으로 만들지 못하게합니다. –

답변

6

CR0는 보호 된 레지스터입니다. 사용자 공간 리눅스 응용 프로그램에서는 수정할 수 없습니다.

관련 문제