COM 파일
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
COM 파일은 CP/M과 DOS에서 사용된 바이너리 실행 파일 형식이다. 단순한 구조로 인해 파일 크기가 최대 64KB 미만으로 제한되며, 메모리에 직접 로드되어 실행된다. MS-DOS에서는 EXE 파일보다 우선적으로 실행되며, 이러한 특징을 악용한 바이러스 공격 사례도 있었다. 윈도우 NT 기반 운영체제에서는 NTVDM을 통해 실행되며, DOS 에뮬레이터에서도 지원된다.
더 읽어볼만한 페이지
- 실행 파일 포맷 - EXE
EXE 파일 형식은 운영 체제에 따라 다양한 종류가 있는 실행 파일의 한 형태로, DOS MZ 실행 파일에서 PE, PE32+까지 발전해 왔으며, 코드, 데이터, 스택을 별도 관리하고 재배치 항목을 통해 실행 환경에 유연하게 대응하는 특징을 가진다. - 실행 파일 포맷 - PE 포맷
PE 포맷은 윈도우 운영체제에서 실행 가능한 파일 포맷으로, COFF를 확장한 형태를 가지며 파일 헤더, 섹션, 임포트/익스포트 테이블 등으로 구성되어 32/64비트 윈도우 환경에서 널리 사용되고 윈도우 보안 기능과 연관되어 활용된다. - 도스 기술 - EXE
EXE 파일 형식은 운영 체제에 따라 다양한 종류가 있는 실행 파일의 한 형태로, DOS MZ 실행 파일에서 PE, PE32+까지 발전해 왔으며, 코드, 데이터, 스택을 별도 관리하고 재배치 항목을 통해 실행 환경에 유연하게 대응하는 특징을 가진다. - 도스 기술 - QEMM
QEMM은 쿼터덱 사에서 출시한 메모리 관리 소프트웨어로, 인텔 80286 이상의 CPU를 위한 다양한 도구와 드라이버를 제공하며, DOS 환경에서 메모리 관리에 중요한 역할을 했다.
| COM 파일 - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 기본 정보 | |
| 종류 | 실행 파일 |
| 파일 확장자 | |
| 파일 확장자 | .COM |
| 기타 | |
| 관련 포맷 | DOS MZ 실행 파일 |
2. 역사
COM 파일 형식은 원래 CP/M 운영 체제에서 사용되었으며, 이후 MS-DOS에도 채택되었다. CP/M에서는 0000h부터 00FFh까지의 처음 256바이트가 시스템 사용을 위해 예약되었고, 모든 사용자 프로그램은 0100h에 로드되어 실행되었다. COM 파일은 이러한 모델에 완벽하게 들어맞았다.
MS-DOS에서는 COM 파일 외에도 EXE 파일, BAT 파일 등 다른 실행 파일 형식이 존재했다.
2. 1. CP/M과 MS-DOS
COM 형식은 CP/M과 MS-DOS에서 사용되는 실행 파일 형식이다. 매우 단순하며, 코드와 데이터만 포함하고 있다. 이러한 단순함 때문에 바이너리의 최대 크기는 64KB에서 256바이트 부족한 65,280바이트이고, 모든 코드와 데이터를 하나의 세그먼트에 저장한다.파일 형식은 DOS와 CP/M에서 동일하지만, 두 운영 체제용 .COM 파일은 호환되지 않는다. DOS COM 파일에는 x86 명령어와 DOS 시스템 호출이 포함되어 있는 반면, CP/M COM 파일에는 8080 명령어와 CP/M 시스템 호출이 포함되어 있기 때문이다.
팻 바이너리 형태로 두 운영 체제 모두에서 실행되도록 .COM 파일을 만들 수 있다. 진입점의 명령은 기능적으로 동일하지만 두 운영 체제에서 다르게 선택되어, 프로그램 실행을 사용 중인 운영 체제의 섹션으로 점프하게 한다. 기본적으로 하나의 파일에 동일한 기능을 가진 두 개의 서로 다른 프로그램이 있고, 사용할 프로그램을 선택하는 코드가 앞에 있는 것이다.
CPU (8080 계열)와 인터럽트 사양 차이로 인해 호환성은 낮다. CP/M과 MS-DOS 모두에서 실행 가능한 파일을 만들 수도 있지만, 양쪽 코드를 모두 포함해야 하므로 파일 크기가 커진다.
2. 2. MS-DOS에서의 발전
MS-DOS에서는 COM 파일이 EXE 파일보다 실행 우선순위가 높았다. 예를 들어, 한 디렉토리에 `foo.com`과 `foo.exe` 두 파일이 있다면, `foo`라고만 입력하면 `foo.com`이 실행된다. `foo.exe`를 실행하려면 `foo.exe`처럼 전체 파일 이름을 명시해야 했다.이러한 특징을 악용하여, 바이러스 제작자들은 `notepad.com`과 같은 이름의 악성 파일을 만들어 사용자가 실수로 `notepad.exe` 대신 악성 파일을 실행하도록 유도하기도 했다.
Windows NT와 그 이후 버전(Windows 2000, Windows XP, Windows Vista, Windows 7 등)에서는 `PATHEXT` 변수를 통해 실행 파일 우선순위를 변경할 수 있지만, 기본값은 여전히 `.com` 파일을 `.exe` 파일보다 우선시한다.
MS-DOS에서 COM 파일을 만들려면, 컴파일러 등으로 EXE 파일을 만든 후, EXE2BIN[1] 같은 프로그램으로 변환하거나, 어셈블리어로 직접 만들 수 있었다.[1]
2. 3. 윈도우 NT와 현재
COM 포맷은 현대의 윈도우 기반 플랫폼에서 실행 파일이지만 MS-DOS 가상 구현 체계에서 돌아간다.[1] x64 계열의 운영 체제에서는 이러한 가상 구현 체계가 없으므로 실행되지 않는다.[1] (가상 구현에 대해서는 NTVDM 참조)[1]COM 파일은 도스박스와 같은 도스 에뮬레이터를 사용하여 실행할 수 있다. 이 에뮬레이터는 모든 플랫폼에서 지원한다. "COM"은 "core image"(코어 이미지)의 준말이며, 이러한 .com 파일이 컴퓨터에서 실행할 수 있는 기본 명령어에 대한 코드를 포함했기 때문에 "command"(명령어)로 해석되기도 한다.
COM형식은 많은 최신 윈도우 NT 기반 컴퓨팅 플랫폼에서도 실행 파일로 작동하지만, 64비트 버전에는 없는 MS-DOS 에뮬레이션 서브 시스템인 NTVDM에서 실행된다. COM 파일은 또한 이러한 에뮬레이터에서 지원되는 모든 플랫폼의 DOSBox와 같은 DOS 에뮬레이터에서도 실행할 수 있다.
3. 파일 형식
COM 파일 형식은 코드와 데이터만 포함하며, 파일 헤더나 메타데이터는 없다. 이 파일은 메모리의 0x0100 번지부터 로드되어 실행된다. 세그먼트가 하나뿐이므로 파일 크기는 최대 65,279 바이트 (64키비바이트 - 257 바이트)로 제한된다. 이러한 제한은 로드 시에 적용되며, 실행 중에는 세그먼트를 변경하거나 64키비바이트를 초과하는 데이터나 프로그램을 읽어올 수 있다.
파일의 내용 전부를 한 번에 로드하고 나서 실행한다는 점은, 전부를 한 번에 로드한다고는 할 수 없는 EXE 파일과의 차이점이다.
윈도우 9x에 있는 COMMAND.COM은 확장자가 .COM이지만 내용은 EXE 파일이며, 파일 크기도 64키비바이트를 초과한다.
3. 1. 구조적 특징
COM 포맷은 가장 단순한 실행 포맷으로, 메타데이터가 없고 코드와 데이터만 포함한다. 파일은 특정 세그먼트의 오프셋 0x0100에서 로드되어 실행된다. 세그멘테이션 모델 덕분에 구조 배치가 필요하지 않다. COM 파일의 최대 지원 용량은 65,536바이트(64키비바이트)로, EXE 파일보다 작다.COM 형식은 CP/M(SCP 및 MSX-DOS 포함)과 DOS에서 사용되는 바이너리 실행 파일 형식이다. 매우 단순하며, CP/M 3 파일을 제외하고는 헤더가 없고, 표준 메타데이터도 없으며, 코드와 데이터만 포함한다. 이러한 단순성 때문에 바이너리의 최대 크기는 65,280(hFF00) 바이트(64 KB에서 256 바이트 부족)로 제한되며, 모든 코드와 데이터는 하나의 세그먼트에 저장된다.
재배치 정보가 없기 때문에 운영 체제는 미리 설정된 주소, 즉 PSP 바로 뒤 오프셋 0100h에 파일을 로드하여 실행한다. 진입점은 0100h로 고정된다.
파일 형식은 DOS와 CP/M에서 동일하지만, 두 운영 체제용 .COM 파일은 호환되지 않는다. DOS COM 파일에는 x86 명령과 잠재적으로 DOS 시스템 호출이 포함되는 반면, CP/M COM 파일에는 8080 명령과 CP/M 시스템 호출이 포함된다.
DOS의 .COM 파일은 모든 x86 세그먼트 레지스터를 동일한 값으로 설정하고, SP(스택 포인터) 레지스터를 프로그램이 로드되는 블록에서 사용 가능한 최대 메모리 크기 또는 처음 64 KB 세그먼트에서 사용할 수 있는 마지막 워드의 오프셋(일반적으로 FFFEh) 중 작은 값으로 설정한다. 따라서 스택은 해당 메모리 세그먼트의 맨 위에서 시작하여 아래로 작동한다.
실행 시의 메모리 이미지가 그대로 파일이 되며, 파일 내용을 0100 번지부터 메모리에 전개(로드)하고 선두에 점프하면 즉시 실행이 시작된다. 파일 헤더 등 일체의 메타데이터를 포함하지 않는다는 점이 EXE 파일과 큰 차이점이다.
세그먼트는 코드와 데이터를 포함하여 1개이며, 이는 복수의 세그먼트를 가질 수 있는 EXE 파일과는 다르다. 이 때문에 파일 크기는 최대 65279바이트 (8086 계열 CPU의 세그먼트 크기인 64킬로바이트에서 메모리 전개 시의 오프셋 256바이트와 스택 1바이트를 뺀 값)이다.
3. 2. 메모리 관리
MS-DOS 환경에서 COM 파일의 메모리 관리는 로더나 실행 환경에 의해 제공되지 않는다. 모든 메모리는 COM 파일에서 사용할 수 있으며, 실행 후에는 운영 체제 명령 셸인 COMMAND.COM이 다시 로드된다. COM 파일은 단일 메모리 세그먼트를 사용하는 매우 간단한 형태이거나, 자체 메모리 관리 시스템을 제공하는 복잡한 형태일 수 있다.실행 시의 메모리 이미지가 그대로 파일이 되어 있으며, 파일 내용을 0100번지부터 메모리에 전개(로드)하고 선두에 점프하면 즉시 실행된다. 파일 헤더 등 일체의 메타데이터를 포함하지 않는다는 점이 EXE 파일과의 큰 차이점이다.
코드와 데이터를 포함하는 세그먼트가 1개이며, 이는 복수의 세그먼트를 가질 수 있는 EXE 파일과는 다르다. 이 때문에 파일 크기는 최대 65279바이트(8086 계열 CPU의 세그먼트 크기인 64킬로바이트에서 메모리 전개 시의 오프셋 256바이트와 스택 1바이트를 뺀 값)이다. 파일 크기가 이를 초과할 경우, 메모리 여유가 얼마나 있든 "프로그램이 너무 커서 메모리에 들어갈 수 없습니다" 또는 "(파일 이름)은 실행할 수 없습니다"라는 오류 메시지가 표시되며 실행되지 않는다. 8080 계열 CPU의 CP/M의 경우에도 마찬가지로 0100 번지에 로드되지만, 메모리 상위에 CP/M 시스템이 상주하고 있기 때문에 로드할 수 있는 파일 크기의 상한은 더욱 작다.
메타데이터가 없기 때문에 극소의 실행 가능 파일을 만들 수 있다. 그래서 일반적으로 EXE 파일보다 작은 경우가 많다. 최소 크기는 1바이트이며, 0바이트에서는 오류가 발생한다.
4. 플랫폼 지원
COM 파일 형식은 현대 윈도우 기반 플랫폼에서도 실행 파일로 작동하지만, MS-DOS 가상 구현 체계인 NTVDM에서 실행된다.[1] 64비트 버전의 윈도우에는 NTVDM이 없으므로 COM 파일을 직접 실행할 수 없다.
하지만, 도스박스와 같은 DOS 에뮬레이터를 사용하면 모든 플랫폼에서 COM 파일을 실행할 수 있다.
4. 1. 호환성 문제
윈도우 NT 기반 운영 체제는 MS-DOS 시절부터 사용되던 소수의 명령에 대해 .com 확장자를 사용하지만, 실제로는 .exe 파일로 구현되어 있다.[1] 운영 체제는 .exe 파일 헤더를 인식하여 기술적으로 잘못된 .com 확장자에도 불구하고 올바르게 실행한다. 이러한 명령에 원래의 .com 확장자를 사용하는 것은 전체 원래 파일 이름으로 이들을 참조할 수 있는 오래된 DOS 배치 파일과의 호환성을 보장하기 위함이다.[1] 해당 명령어는 다음과 같다.| 명령어 |
|---|
| CHCP |
| DISKCOMP |
| DISKCOPY |
| FORMAT |
| MODE |
| MORE |
| TREE |
5. 실행 우선 순위
MS-DOS에서는 동일한 이름의 COM 파일과 EXE 파일이 모두 존재할 경우, COM 파일이 우선 실행된다. 예를 들어 시스템 경로에 `foo.com`과 `foo.exe` 두 파일이 있다면, `foo`만 입력하면 `foo.com`이 실행된다. `foo.exe`를 실행하려면 `foo.exe`처럼 전체 파일 이름을 명시해야 한다. 이러한 특징은 바이러스 제작자들이 악용하기도 했다.
5. 1. 악용 사례
바이러스 제작자들은 .com 확장자에 대한 사용자의 낮은 인지도와 .com 인터넷 도메인 이름에 대한 친숙도를 이용해 악성 코드를 유포하려 했다. 이들은 사용자가 .com 확장자를 가진 이메일 첨부 파일을 열어 악성 COM 파일을 실행하도록 유도했다.DOS에서 동일한 이름을 가진 COM 파일과 EXE 파일이 모두 존재할 경우, 확장자를 지정하지 않으면 COM 파일이 우선적으로 실행된다. 예를 들어, 시스템 경로에 `foo.com`과 `foo.exe` 두 파일이 있다면, `foo` 명령어는 `foo.com`을 실행한다. `foo.exe`를 실행하려면 전체 파일 이름을 명시해야 했다.
이러한 기본 동작을 악용하여, 바이러스 제작자들은 `notepad.com`과 같은 이름으로 악성 코드를 만들어, 텍스트 편집기 `notepad.exe` 대신 실행되도록 유도했다. 이 .com 파일들은 실제로는 .exe 형식의 실행 파일을 포함할 수도 있었다.
Windows NT와 그 파생 제품들(Windows 2000, Windows XP, Windows Vista, Windows 7)에서는 `PATHEXT` 변수를 사용하여 명령줄에서 확장자를 지정하지 않고 파일을 호출할 때의 우선 순위(및 허용되는 확장자)를 재정의할 수 있다. 기본값은 여전히 `.com` 파일을 `.exe` 파일보다 우선시한다. 이는 4DOS, 4OS2, 4NT와 같은 확장 명령줄 프로세서의 기능과 유사하다.
6. 제작 방법
COM 파일을 만들려면 컴파일러 등으로 EXE 파일로 만든 후, MS-DOS 외부 명령어인 EXE2BIN영어이나 EXE2COM(프리 소프트웨어)과 같은 프로그램으로 변환할 수 있다. 어브솔루트 어셈블리어로 직접 만들 수도 있다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com