2011-01-16 5 views
3

누군가 하드웨어에서 제공하지 않는 32 비트 x86과 같은 플랫폼에서 NX 비트를 에뮬레이트 할 수있는 방법을 설명 할 수 있습니까? 나는 어떻게 그것이 실현 될 수 있었는지 상상할 수 없기 때문에 그것이 모방되는 방식의 기본에 대한 설명을하기에 좋을 것입니다. 미리 감사드립니다.NX 비트 에뮬레이션

답변

0

필자는 결코 NX 에뮬레이션을 구현하지 못했지만 x86에 대한 정보를 알고있는 것이 그것이 작동하는 방법에 대한 최선의 추측입니다.

커널이 코드를 포함 할 수있는 주소 범위를 정의하는 방법은 모두 global descriptor table입니다.

32 비트 보호 모드의 x86에서는 16 비트 코드의 오래된 "세그먼트 레지스터"가 여전히 의미가 있습니다. 세그먼트 레지스터는 GDT에서 어떤 항목이 사용되는지를 결정합니다. GDT 항목은 본질적으로 메모리 범위입니다. 커널이 주소 범위가 [x, y] 인 GDT 항목에서 cs (코드 세그먼트) 레지스터를 가리키는 경우 해당 범위를 벗어난 주소는 실행 불가능합니다.

NX 비트가 page table 항목에 들어가기 때문에 이것은 NX 비트보다 훨씬 더 거칠다는 것에 유의하십시오. 따라서 NX 비트를 사용하면 임의의 페이지를 비 실행 가능으로 표시 할 수 있습니다. 반면 cs 세그먼트를 사용하면 세그먼트를 실행 불가능한 것으로 지정할 수 있습니다.