#42. 서브 시스템의 비밀

Windows 기반의 어플리케이션들은 일반적으로 Win32 커널이 띄워져있는 상태에서 수행되도록 설계가 되어있습니다. 만일, 순수한 16비트 상태의 Native MS-DOS나 MS-DOS와 호환이 가능한 FreeDOS나 DR-DOS, 혹은 OS/2 콘솔 등에서 Windows 기반의 어플리케이션을 수행하려고 하였을 때에 여러분은 다음과 같은 에러 메시지를 접할 수 있습니다.


This program cannot be run in DOS mode.


이러한 에러 메시지를 접할 수 있는 이유는 매우 당연한 사실입니다. 하지만, 이 에러 메시지를 그냥 무시하고 지나치지 맙시다.


Windows 95 이상의 배포 패키지의 설치 부트 스트랩 파일들을 살펴봅시다. Windows 95, 98, Me에서 수행되는 것은 물론이거니와 Windows 3.1, MS-DOS에서도 수행이 됩니다. 이것이 가능한 이유가 무엇일까요? MS사만의 편법? 아니면 MS사만의 기술적 노하우? 아닙니다.


의외로 간단한 비밀이 있습니다. 바로 서브 시스템이라고 하는 부분인데, 서브 시스템은 현재 컴퓨터 시스템에 수행중인 운영 체제나 환경에 따라서 프로그램을 구동시켜주는 부분입니다.


일반적으로 Windows 어플리케이션들은 32비트 기반의 Windows 환경이나 16비트 환경이지만 32비트 DLL을 사용할 수 있는 환경이 갖추어진 상태 (Windows 3.1 시스템에 Win32s 패키지를 설치한 경우…)에서 수행되도록 설계되어있습니다.


하지만 특정 프로그램에 의하여 서브 시스템을 조작한 상태에서 어떤 어플리케이션을 수행하게 되면 그 어플리케이션에 별도의 기능이 포함되어져 있을 경우 그 기능으로 수행이 됩니다. 좀 더 쉬운 말로 하자면, Windows 프로그램이 서브 시스템 조작 트랩에 의하여 MS-DOS창에서 수행되는 프로그램으로 전환되는 것이 가능하다는 점입니다.


이에 관련된 예제를 게시해놓았습니다. 잘 검토하여 보시고 분석해 보시기 바랍니다.

cfile28.uf.1350B4254BDDAA698E98D9.zipcfile25.uf.13227A134BDDAA6A3093C2.zip

댓글 남기기