인터럽트 서술자 테이블인터럽트 서술자 테이블(Interrupt descriptor table, IDT)은 인터럽트 벡터 테이블을 구현하기 위해 X86 아키텍처에서 사용되는 데이터 구조체이다. IDT는 프로세서가 인터럽트와 예외에 대한 정확한 반응을 결정하기 위해 사용된다. 아래에서 설명할 자세한 부분들은 x86 아티텍처와 AMD64 아키텍처에서 적용되는 것이다. 다른 아키텍처들은 비슷한 구조체를 갖지만 행동은 조금 다를 수 있다. IDT의 사용은 다음 3 종류의 이벤트들에 의해서 발생된다. 인터럽트로 불리는 하드웨어 인터럽트, 소프트웨어 인터럽트 그리고 프로세서 예외이다. IDT는 256개의 인터럽트 벡터들로 이루어져 있으며 처음 32개는 프로세서 예외를 위해 예약되어 있다. 리얼 모드인텔 8086 프로세서에서, IDT는 x86 리얼 모드에서 주로 사용되는 인터럽트는 보호 모드보호 모드에서, IDT는 메모리에 연속적으로 저장된, 그리고 인터럽트 벡터에 의해 색인화된 8바이트 디스크립터의 배열이다. 이 디스크립터들은 인터럽트 게이트나 트랩 게이트 또는 태스크 케이트일 수 있다. 인터럽트와 트랩 게이트는 세그먼트와 세그먼트 내의 오프셋에 명시된, 실행되는 코드를 포함하는 메모리 위치를 가리킨다. 이 둘 사이의 단 하나의 차이점은 인터럽트 게이트는 (하드웨어 인터럽트를 다루는) 프로세서를 서비스 하드웨어 인터럽트에 맞추어서 그 이상의 것이 금지될 것이고, 트랩 게이트는 하드웨어 인터럽트를 사용 가능케 하고 소프트웨어 인터럽트와 예외를 다루는데 쓰이게 된다. 마지막으로, 태스크 게이트는 하드웨어 태스크 스위치 메커니즘을 사용해 효과적으로 프로세서의 사용을 다른 프로세스나 스레드에 넘겨주는 것을 목적으로 현재 활성화된 태스크 상태 세그먼트를 바뀌게 한다. 보호 모드 IDT는 물리 메모리의 어느 곳이는 위치할 수 있다. 프로세서는 물리 베이스 주소와 IDT의 바이트 길이를 저장하기 위해 특별한 레지스터 ( 완전한 IDT는 2KB의 길이를 갖는다. 가능한 엔트리들을 모두 사용하는 것은 필요치 않다. IDT의 수를 사용되는 인터럽트 벡터의 가장 높은 수준으로 올리고 IDT 길이를 적절하게 하드웨어에서 생성된 예외들0x0과 0x1F 사이의 모든 포괄적인 INT_NUM은 예외들을 위해 예약되어 있다. 0x1F보다 큰 INT_NUM는 인터럽트 루틴을 위해 사용된다.
후킹몇몇 윈도우 프로그램들은 IDT를 호출하기 위해 후킹한다. 이것은 커널 모드 장치 드라이버를 쓰는 것을 포함한다(IDT 호출을 가로채고 자신의 과정을 넣는다). 이것은 마이크로소프트에서 정식으로 지원하지 않지만, 64비트 버전 까지는 프로그램적으로 막혀있지는 않다(커널 모드 후킹을 사용하려는 시도를 하는 드라이버는 시스템의 버그 체크를 유발할 것이다).[1] 각주
외부 링크
|
Portal di Ensiklopedia Dunia