Control Register(CR3)의 값을 읽을때, GAS fault ??

ukyoukyo의 이미지


x86 system에서 control register(CR3)를 읽으려고 합니다.

목적은 Page Directory의 시작위치를 읽기위해서요...

int main(void)
{
    int cr3_value = 0;
 
    asm
    (
        "movl %%cr3, %%eax\n\t"
        "movl %%eax, %0"
        : "=m"(cr3_value)
        :
        : "eax"
    );
 
    printf("cr3_value == %X\n", cr3_value);
 
    return 0;
}

위와 같이하면 컴파일(gcc)은 되는데,

실행하면 Seg' fault 발생합니다.

CR3를 커널레벨이 아닌 일반 응용프로그램 레벨에서 읽으려면 어떻게 해야하는가요?

grassman의 이미지

디바이스 드라이버를 하나 만들어서 Ring 0로 올린 뒤에 읽어야 됩니다.
응용 프로그램(Ring 3)에서는 OS가 막고 있기 때문에 안됩니다.

ukyoukyo의 이미지


모듈을 만들어서 올리겠습니다...

------------------ System programmer...^^


------------------ System programmer...^^