JC Tailor

블로그 이미지
컴퓨터를 사랑하자.~
dkcjs3

Article Category

분류 전체보기 (52)
프로그램방법론 (0)
Tailor 이야기 (0)
C언어 이야기 (49)
C++ 이야기 (1)
API 이야기 (0)
MFC 이야기 (0)
Window XP 이야기 (0)
컴퓨터정보 (1)
나의 삶 이야기 (1)
UNIX (0)

Recent Comment

Calendar

«   2007/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Archive

  • Total25,060
  • Today1
  • Yesterday4
  1. 2007.05.23
    훅킹(Hooking)과 체이닝(Chaining)
  2. 2007.05.05
    커널에 대하여
인터럽트를 호출하는 입장에서 봐서,  인터럽트는 동작하는 방법에 따라 두가지

의 형태로 분류된다.



        (1) 훅킹(Hooking)

        (2) 체이닝(Chaining)



'훅킹'이란 원래의 인터럽트를 자신의 프로그램으로 대체하는 것을 말하는 것으

로 인터럽트가  걸리게 되면 원래의 인터럽트 내용은 무시되고 지정된 프로그램

내용을 수행하게 된다. 이의 대표적인 예로 'Ctrl-C'처리 루틴이 있다.

전통적인 경우에, 프로그램 수행 중 'Ctrl-C'를 누르게 되면 의도적이었던 실수

였던 그런 시비를 가릴 틈도 주지 않고 인터럽트 23h가 걸리고 프로그램은 비정

상적으로 종료하게 된다.

이 과정에서 보기 좋게 장식해 놓은 화면이 깨지고(^C) 보기 흉하게 되고 만다.



대부분의 상업적인 목적의 프로그램에서는 이러한 문제점을 극복하기 위해,

키보드로 부터 'Ctrl-C'가 감지되었을 때(INT 23h가 걸렸을 때) 경고 메세지를

보내거나 이를 무시하게 된다.



이렇게 인터럽트를 가로채고('가로채기'를 가로챈다) 특별한 내용을 수행하도록

계획된 루틴을 '인터럽트 핸들러(Interrupt Handler)'라고 한다.



'체이닝'은 훅킹과는 조금 다른 양상을 띠고 있다. '훅킹'이 특정한 인터럽트의

원래 내용 전체를 무시하고 자신의 루틴을 수행하는 반면 '체이닝'은 원래의 내

용을 추가 또는 수정한 것이라 할 수 있다. 말하자면, 원래의 루틴은 반드시 수

행된다는 것이다. 다만 그 루틴은 프로그램에 의해 '가공'된 내용이 된다.

  이에 대한 예로 통상 '도스 인터럽트'라고 불리는 인터럽트 21h를 가로챈다고

생각해 보자. 인터럽트 21h는 수많은 서브루틴을 포함하고 있다. 그러나 프로그

램에서 필요한 것은 간단하다. 한 개의 문자를 받아 들이는 부분에서 문자를 검

색해서 선택적으로 받아 들이기 위해 작은 부분의 내용만 수정하기를 원하는 것

이다(만약 인터럽트 21h의 내용 전부를 가로채고자 하는 사람이 있다면... 열심

히 공부해서 Microsoft의 MS-DOS개발팀에 참가하는  빠를 것이다).

이 경우의 수정된 루틴의 형태는 아래와 같다.



        - 한 문자 입력 함수를 호출하고 있는가?

          서브루틴의 번호가 AH에 저장되어 있을 것이므로 AH를 검사해 보면

          알 수 있다(예: AH = 01h, 한 문자 입력(Echo))



        - 프로그램에서 정의된 검사루틴과 이에 따른 처리



        - 원래의 인터럽트로 연결(Chaining)



위의 동작 과정이 잘 이해되지 않는다고 해서 걱정할 것은 없다. 나중에 실제로

해볼 것이다.
신고
Trackback 0 and Comment 0
돌도끼 ㅡㅡ
신고
Trackback 0 and Comment 0

Tag Cloud


티스토리 툴바