딩굴댕굴

[Hackerschool FTZ] level 6 - 시스템 인터럽트

by jennysgap

BOX


[Hackerschool FTZ] level 6 - 시스템 인터럽트


어떤 프로그램이 동작하는데 동작 중간에 컨트롤+C를 눌러 컨트롤 exit하는 것 = 인터럽트

예를 들면 긴급한 상황이 발생했을 때, 지금 실행중이 프로그램 보다 다른 급한 프로그램을 먼저 처리해 달라고 하는 것이다. 


Password: what the hell


로그인시 bbs 텔넷 접속 메뉴에서는 많이 사용하던 해킹 기법이라는 표시만 나타나고,

엔터키를 입력하면 아래 그림과 같은 메뉴가 나타남

1,2,3 어떤 메뉴를 선택해도 접속이 제대로 이루어지지 않으며, 접속 자체가 종료되어 버림


But 힌트 안내창에서 컨트롤+C를 눌러 빠져나가게 된다면 어떻게 될까?





참고 자료1

 13-OS-IOSystem.pdf


참고 자료2

1. 인터럽트란?

어떤 장치가 다른 장치의 일을 잠시 중단시키고 자신의 상태 변화를 알려 주는 것이다.

인터럽트가 걸리면 인터럽트를 받은 장치는 현재 자신의 상태를 기억시켜두고 인터럽트 처리를 진행한다.


2. 인터럽트 종류

인터럽트에서 3가지 종류가 있다. 예외상황 인터럽트, 하드웨어 인터럽트, 그리고 시스템 콜이 그것이다.

예외상황 인터럽트와 하드웨어 인터럽트는 다시 여러 가지 종류로 나뉜다.


예외상황 인터럽트는 시스템에 심각한 에러가 생겼을 때 발생된다. 어떤 수는 0으로 나누라는 명령어가 실행되었다든지, 페이지 폴트가 일어났다든지 하는 것이 그것이다. 인텔 0x86 프로세서에서는 20가지의 예외상황을 정의해놓고 있다.


하드웨어 인터럽트는 주변장치에 사건이 일어났을 때 발생된다. 키보드를 건드린다든지, 네트워크 카드에 패킷이 도착했다든지. 인텔 프로세스는 16개 내외의 하드웨어 인터럽트를 정의하고 있다.


마지막으로 시스템 콜은 프로그래머가 int 명령으로 발생시킨다. 앞에서 설명한 예외상황과 하드웨어 인터럽트는 프로그래머가 int 명령으로 직접 발생시키는 것이 아니고 시스템에 예외적인 혹은 하드웨어적인 사건이 일어났을 때 시스템이 자동으로 발생시킨다. 하지만 시스템 콜은 프로그래미가 운영체제의 서비스를 요청하기 위해 프로그램 내에서 int 명령을 통해 발생시킨다. 시스템 콜의 사용 규칙은 운영체제가 정하며 리눅스 0x80 번 (10진수로 128번) 인터럽트를 시스템 콜로 정의하고 있다. 운영체제가 제공하는 시스템 콜 서비스는 리눅스의 경우 250 여개가 넘기 때문에 프로그래머는 eax 레지스터에 시스템 콜 번호를 전달함으로써 요청 서비스를 명시해야 한다.


3. 인터럽트 번호

각 인터럽트마다 인터럽트 번호가 붙는다. 인터럽트 번호 자체는 예외사항 인터럽트를 제외하고는 운영체제가 결정한다. 리눅스에서 인터럽트 번호는 아래와 같다. 

 0  ~ 31  : 예외상황 인터럽트 (20~31은 아직 정의되지 않음)

32 ~ 47  : 하드웨어 인터럽트 (주변장치의 개수에 따라 증감이 가능)

128  : 시스템 콜


반응형

블로그의 정보

jennysgap

jennysgap

활동하기