콜 게이트

콜 게이트(call gate)는 CPU의 동작레벨이 낮은 상태에서 높은 레벨의 코드를 호출하기 위한 '입구(Gate)'를 제공하는 구조이다. 소프트웨어 인터럽트(트랩)와 더불어 API를 호출할 때에 사용자 모드에서 커널 모드로 진입하기 위한 방법 중 하나이다.

콜게이트는 컴퓨터 시작시에 운영체제에서 준비를 하는데, 콜게이트를 정의하려면 글로벌/로컬 디스크립터 테이블에 '게이트 디스크립터'를 만들어야 한다. 이 게이트 디스크립터는 8바이트로 실행을 시작하는 코드의 셀렉터값, 그 세그먼트에서의 오프셋, 게이트 속성이 저장되어 있다.

속성에는 게이트의 특권레벨을 나타내는 필드가 있어, CPU의 동작레벨이 여기에 지정된 값 이상이면 게이트를 경유해서 지정한 코드를 실행할 수 있다.

콜 게이트 서술자 포맷 
typedef struct _CALL_GATE
{
	USHORT OffsetLow;
	USHORT Selector;
	UCHAR NumberOfArguments:5;
	UCHAR Reserved:3;
	UCHAR Type:5;
	UCHAR Dpl:2;
	UCHAR Present:1;
	USHORT OffsetHigh;
}CALL_GATE,*PCALL_GATE;

X86 아키텍처