COM 파일
COM file이 글은 검증을 위해 인용구가 추가로 필요하다. – · · 책 · · (2009년 2월) (이 를 |
파일 이름 확장명 | .COM |
---|---|
인터넷 미디어 유형 | application/x-xec |
형식 유형 | 실행 파일 |
까지 확장 | DOS MZ 실행 파일 |
COM 파일은 간단한 실행 파일의 한 유형이다.1970년대의 디지털 장비 회사(DEC) VAX 운영체제에서는,.COM
운영 체제에 실행할 명령이 포함된 텍스트 파일의 파일 이름 확장명으로 사용됨(배치 파일에 추가됨).[1]디지털 리서치의 CP/M(마이크로컴퓨터 운영체제)이 도입되면서 COM 확장과 공통적으로 연관된 파일 유형이 실행 파일의 유형으로 바뀌었다.이 협약은 나중에 DOS로 넘어갔다.실행 파일에 대한 보다 일반적인 EXE 파일 형식으로 보완하더라도, 컴팩트한 COM 파일은 여전히 실행 가능하고 DOS에서 자주 사용된다.
그.COM
파일 이름 확장자는 .com("상용") 최상위 인터넷 도메인 이름과 관련이 없다.그러나 이러한 이름의 유사성은 악성코드 작성자에 의해 악용되어 왔다.
DOS 이진 형식
COM 형식은 DOS뿐만 아니라 CP/M(SCP, MSX-DOS 포함)에서 사용되는 원래의 이진 실행형 형식이다.매우 간단하다. 헤더가 없고(CP/M 3 파일 제외),[2] 표준 메타데이터가 없으며 코드와 데이터만 포함되어 있다.이 단순성은 가격을 정확히 매긴다. 이 2진수는 최대 크기가 65,280바이트(FF00h)이고 모든 코드와 데이터를 하나의 세그먼트에 저장한다.
재배치 정보가 부족하기 때문에 PSP 직후 오프셋 0100h로 미리 설정된 주소에서 운영 체제에 의해 로드되며, 여기서 실행(실행 파일의 크기 제한 확인): 진입점은 0100h로 고정된다.[nb 1]이는 최대 메모리 64k를 처리할 수 있어 8비트 시스템에서는 문제가 되지 않았지만 16비트 시스템에서는 훨씬 더 큰 주소 공간을 가지고 있어 포맷이 사용되지 않게 되었다.
Intel 8080 CPU 아키텍처에서는 65,536바이트의 메모리만 처리할 수 있었다(주소 범위 0000h ~ FFFFh).이 메모리의 처음 256바이트인 CP/M에서 0000h ~ 00FFh는 0페이지에 의해 시스템 사용을 위해 예약되었고, 모든 사용자 프로그램은 정확히 0100h로 로드되어야 실행되었다.[nb 1]COM 파일은 이 모델에 완벽하게 적합하다.MP/M과 Concurrent CP/M이 도입되기 전에는 0100h로 로드된 프로그램이 실행되었고, 다른 프로그램이 실행되지 않는 등 한 번에 둘 이상의 프로그램이나 명령을 실행할 가능성이 없었다.
파일 형식은 DOS와 CP/M에서 동일하지만, 두 운영 체제의 .COM 파일은 호환이 되지 않는다. DOS COM 파일에는 x86 명령어와 DOS 시스템 호출이 포함되어 있고, CP/M 파일에는 8080 명령어와 CP/M 시스템 호출이 포함되어 있다(특정 기기로 제한된 프로그램에도 8085 또는 8085에 대한 추가 지침이 포함될 수 있음).Z80).
DOS의 .COM 파일은 모든 x86 세그먼트 레지스터를 동일한 값으로 설정하고 SP(스택 포인터)는 FFFCh 또는 FFEh로 등록하므로 스택은 메모리 세그먼트 맨 위에서 시작하여 거기서부터 아래로 작동한다.[3][4]
CP/M API의 파생 모델이었던 원래의 DOS 1.x API에서는 의 프로그램 종료가 .COM 파일은 INT 20h (Terminal Program) 함수 또는 같은 목적을 가진 INT 21h Function 0으로 호출하여 수행되며, 프로그래머는 또한 잠재적인 시스템 충돌을 피하기 위해 프로그램 종료 시 코드와 데이터 세그먼트 레지스터가 동일한 값을 포함하는지 확인해야 했다.어떤 DOS 버전에서도 이 기능을 사용할 수 있지만, 마이크로소프트는 데이터 및 코드 세그먼트를 동일한 값으로 설정할 필요가 없는 DOS 2.x부터 프로그램 종료에 INT 21h Function 4Ch를 사용할 것을 권고했다.
a를 만드는 것은 가능하다.두 운영 체제에서 지방 이진 형식으로 실행되는 COM 파일.지침 수준에는 진정한 호환성이 없다. 진입점의 지침은 기능성은 동일하지만 두 운영 체제에서는 다르며, 프로그램 실행을 사용 중인 운영 체제의 섹션으로 이동하도록 선택한다.그것은 기본적으로 하나의 파일에서 동일한 기능을 가진 두 개의 다른 프로그램이며, 그 다음에 사용할 프로그램을 선택하는 코드가 뒤따른다.
CP/M 3에서는 COM 파일의 첫 번째 바이트가 C9h일 경우 256바이트 헤더가 있다.[2] C9h는 8080 지침에 해당하기 때문이다.RET
이 확장자를 지원하지 않는 이전 버전의 CP/M에서 실행되면 COM 파일이 즉시 종료됨을 의미한다.(8085와 Z80의 명령 집합은 8080 명령 집합의 상위 집합이기 때문에, 이것은 3개의 프로세서에서 모두 작동한다.)C9h는 8088/8086에서 유효하지 않은 opcode로, 386 이상 x86 칩에서 v86 모드에서 프로세서 생성 인터럽트 6 예외를 발생시킨다.C9h는 80188/80186년 이후 REACE에 대한 opcode이므로 유효한 프로그램의 첫 번째 지침으로 사용되지 않으므로, DOS 일부 버전에서 실행 가능한 로더는 C9h로 시작하는 COM 파일을 거부하여 충돌을 피한다.
파일에는 로 끝나는 이름이 있을 수 있다.COM, 그러나 위에서 설명한 단순한 형식은 아니다. 이 형식은 파일 시작 부분에 있는 매직 번호로 표시된다.예를 들어, COMMANTER.DR DOS 6.0의 COM 파일은 실제로 DOS 실행 파일 형식이며, 처음 두 바이트는 MZ(4Dh 5Ah)로 표시되며 Mark Zbikowski의 이니셜이다.
대형 프로그램
DOS에서는 로더나 실행 환경에 의한 COM 파일에 대해 제공되는 메모리 관리가 없다.모든 메모리는 간단히 COM 파일에 사용할 수 있다.실행 후 운영 체제 명령 셸, COMMAND.COM이 다시 로드되었다.이는 COM 파일이 단일 세그먼트를 사용하여 매우 단순하거나 임의로 복잡하여 자체 메모리 관리 시스템을 제공할 수 있는 가능성을 남겨둔다.복합 프로그램의 예는 COMMANT이다.다른 COM 또는 EXE 프로그램을 로드하기 위한 로더를 제공한 DOS 셸 COM.에서COM 시스템, 더 큰 프로그램(사용 가능한 메모리 크기까지)을 로드하고 실행할 수 있지만, 시스템 로더는 모든 코드와 데이터가 첫 번째 세그먼트에 있다고 가정하고, 에 따라 실행된다.추가 조직을 제공하기 위한 COM 프로그램.필요한 코드가 에 포함된 경우 사용 가능한 메모리보다 큰 프로그램 또는 대용량 데이터 세그먼트를 동적 연결로 처리할 수 있다.COM 프로그램.를 사용할 때의 이점..보다 COM.EXE 형식은 이진 이미지가 일반적으로 더 작고 조립자를 사용하여 프로그래밍하기 쉽다는 것이다.[5]일단 충분한 전력을 가진 컴파일러와 링크러를 이용할 수 있게 되면, 더 이상 을 사용하는 것이 유리하지 않았다.복잡한 프로그램의 COM 형식.
플랫폼 지원
이 포맷은 여전히 많은 현대적인 윈도 NT 기반 플랫폼에서 실행 가능하지만, MS-DOS를 발현하는 서브시스템인 NTVDM에서 실행되는데, 64비트 변형으로는 존재하지 않는다.COM 파일은 DOSBox와 같은 DOS 에뮬레이터에서도, 이들 에뮬레이터에 의해 지원되는 어떤 플랫폼에서도 실행될 수 있다.
호환성 이유로 사용
Windows NT 기반 운영 체제는 MS-DOS일로부터 전송된 소수의 명령에 대해 .com 확장자를 사용하지만, 실제로는 .exe 파일로 구현되어 있다.운영 체제는 .exe 파일 헤더를 인식하여 기술적으로 잘못된 .com 확장자에도 불구하고 올바르게 실행한다.(사실 모든 .exe 파일의 이름은 .com으로 바꿀 수 있지만 여전히 올바르게 실행될 수 있다.)이러한 명령에 원본 .com 확장자를 사용하면 전체 원본 파일 이름으로 참조할 수 있는 이전 DOS 배치 파일과의 호환성을 보장할 수 있다.이 명령들은DISKCOMP
,DISKCOPY
,FORMAT
,MODE
,MORE
그리고TREE
.
실행우선순위
DOS에서, 디렉토리에 COM 파일과 동일한 이름의 EXE 파일이 모두 포함되어 있는 경우, 확장자가 지정되지 않은 경우, COM 파일은 실행을 위해 우선적으로 선택된다.예를 들어 시스템 경로의 디렉토리에 이름이 지정된 두 개의 파일이 있는 경우foo.com
그리고foo.exe
, 다음이 실행될 것이다.foo.com
:
C:\>foo
실행하려는 사용자foo.exe
전체 파일 이름을 명시적으로 사용할 수 있음:
C:\>foo.퇴장시키다
이러한 기본 행동을 이용하여 바이러스 작성자와 다른 악성 프로그래머들은 다음과 같은 이름을 사용했다.notepad.com
해당 EXE 파일과 동일한 디렉토리에 배치될 경우, 명령어 또는 배치 파일이 텍스트 편집기 대신 실수로 프로그램을 트리거할 수 있기를 바라며, 이러한 .com 파일은 실제로 .exe 형식 실행 파일을 포함할 수 있다.
Windows NT 및 파생 모델(Windows 2000, Windows XP, Windows Vista 및 Windows 7)에서는 PATHEXT 변수를 사용하여 명령줄에서 확장자를 지정하지 않고 파일을 호출하기 위한 기본 설정(및 허용 가능한 확장자) 순서를 재정의한다.기본값이 계속 유지됨.com
이전 파일.exe
이는 JP 소프트웨어의 확장된 명령줄 프로세서 4DOS, 4OS2 및 4NT 라인에서 이전에 발견된 기능과 매우 유사하다.
.com 확장자의 악의적인 사용
일부 컴퓨터 바이러스 작성자들은 현대 컴퓨터 사용자들이 .com 파일 확장자와 관련 이진 포맷에 대한 지식이 부족할 가능성이 있는 것과 더불어 .com 인터넷 도메인 이름에 더 많이 친숙해질 수 있는 것을 이용하기를 희망해 왔다.이메일은 "www.example.com"과 유사한 첨부 파일 이름으로 보내졌다.이러한 첨부 파일을 클릭하지 않는 Microsoft Windows 사용자는 이름이 지정된 사이트 검색을 시작할 것으로 예상됨http://www.example.com/
, 그러나 대신 이름이 지정된 첨부된 이진 명령 파일을 실행함www.example
이 책의 저자가 염두에 둔 것이 무엇이든 그들의 기계에 할 수 있도록 전적으로 허락했다.
COM 파일 형식 자체에 악의적인 것은 없으며, 이는 .com 명령어 파일과 .com 상업용 웹 사이트 간의 우연의 이름 충돌에 대한 공격이다.
참고 항목
메모들
참조
- ^ Christian, Brian; Markson, Tom; Skrenta, Rich (eds.). "Section 5.3". The PDP-11 How-To Book (Revision 1 ed.). Archived from the original on 2018-08-01. Retrieved 2018-08-01. (NB. 섹션 5.3에 나와 있는 PDP-11 미니컴퓨터에서 실행되는 RT-11 운영 체제에 대한 참조가 있다.COM은 명령 파일을 참조하는 데 사용된다.)
- ^ a b Elliott, John C.; Lopushinsky, Jim (2002) [1998-04-11]. "CP/M 3 COM file header". Seasip.info. Archived from the original on 2018-08-01.
- ^ Lunt, Benjamin "Ben" D. (2020). "DOS .COM startup registers". Forever Young Software. Archived from the original on 2020-11-12. Retrieved 2021-12-14.
- ^ Paul, Matthias R. (2002-10-07) [2000]. "Re: Run a COM file". Newsgroup: alt.msdos.programmer. Archived from the original on 2017-09-03. Retrieved 2017-09-03. [1] (NB).DOS COM 프로그램 호출 규약에 대한 세부 정보를 가지고 있다.)
- ^ Scanlon, Leo J. (1991). "Chapter 2". Assembly Language Subroutines for MS-DOS (2 ed.). Windcrest Books. p. 16. ISBN 0-8306-7649-X.