MZ 실행 파일 - 위키백과, 우리 모두의 백과사전 MZ 실행 파일 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 MZ 실행 파일 확장자. exe 매직 MZ 파일 포맷 종류 이진 파일, 실행 파일 MZ 실행 파일 형식은 DOS에서. EXE 실행 파일에 사용되는 파일 형식이다. 파일의 맨 앞에 있는 " MZ " 라는 아스키 문자열 ( 16진수로는 4D 5A ) 로 식별할 수 있다. 이런 걸 " 매직 넘버 " 라고 한다. " MZ " 는 MS - DOS의 개발자였던 Mark Zbikowski의 머리글자를 딴 것이다. MZ 실행 파일은 기존 COM 실행 파일 대비 새로운 형식이다. 파일은 머리에 릴로케이션 정보를 가지는데, 이것은 여러 세그먼트를 임의의 메모리에 올릴 수 있도록 해준다. 그리고 64Ki
M 실행 파일 대비 새로운 형식이다. 파일은 머리에 릴로케이션 정보를 가지는데, 이것은 여러 세그먼트를 임의의 메모리에 올릴 수 있도록 해준다. 그리고 64KiB보다 큰 실행 파일을 만들 수 있다. 하지만, 옵셋에 대한 64KiB의 한계는 여전하다. 이것은 나중에 나오는 도스 확장자를 사용해서 피할 수 있다. 도스를 통해 구동되는 EXE 프로그램의 환경은 프로그램 세그먼트 프리픽스에서 볼 수 있다. 목차 1 기본 머리 2 덧붙인 머리 3 재배치 정보 4 실제 5 호환성 6 같이 보기 7 외부 링크 기본 머리 [ 편집 ] OFFSET TYPE 설명 00h c char'MZ'( 0x4d, 0x5a ) 0002h 1 word 마지막 페이지 ( 블록이라고도 한다 ) 의 바이트 수. 한 페이지는 512바이트다. 000
B 안에서만 움직인다면 프로그램을 만드는 순간에 모든 주소를 분명하게 알 수 있다. 이렇게 만들어진 프로그램은 메모리의 어떤 위치에 올리게 되더라도 시작점을 세그먼트로 잡아주기만 하면 나머지는 그에 대한 상대위치이기 때문에 실행에 아무런 문제가 없다. 그러나 MZ 형식은 64KiB라는 한계를 벗기 위해 여러 세그먼트를 가지도록 한 것이 핵심이다. 그런데 이 세그먼트란 것이 실제 메모리 위치를 가리키는 값이기 때문에 프로그램을 만들 때는 그 정확한 값을 알 수가 없다. 메모리에 올려줘야만 알 수 있다. 이 문제를 해결하려면 프로그램하는 동안에는 자신이 0번지에 올려지는 것처럼 주소를 산정하고, 실제로 특정 메모리로 올려질 때 그 시작점을 0을 기준으로 했던 모든 세그먼트에 더해줘야 한다. 이것이 재배치
윈도에서는 실행할 수 없다. 대신에 DOSBox, DOSEMU, 와인 등을 사용해서 실행할 수 있다. 디지털 마스 Optlink, MS 링커, VALX, 오픈 왓콤의 WLINK, 등등의 링커로 MZ 실행 파일을 만들 수 있다. 덧붙여 FASM로는 바로 만들 수 있다. 같이 보기 [ 편집 ] 도스 도스 확장자 MS - DOS API 외부 링크 [ 편집 ] ( 영어 ) EXE Format ( 영어 ) MZ DOS EXE file format vdeh실행 파일과 목적 파일 형식 a. out AIF COFF CMD COM ECOFF ELF 헝크 Mach - O MZ NE OMF OS / 360 PE PEF XCOFF 형식 비교. exe 원본 주소 " " 분류 : 실행 파일 포맷 둘러보기 메뉴 개인 도구 로그인하지 않음
3 : 0080으로 된다. CS : IP는 0번지에서 바로 시작하므로 00 : 00이다. 만약 소스에서 - text와 - data의 위치를 서로 바꾼다면 다른 변화도 생기겠지만, CS : IP가 - data의 크기만큼 뒤로 밀리게 된다. - data은 문단 단위의 경계에 맞추려면 크기가 0x10이 되기 때문에 CS : IP는 0001 : 00이 될 것이다. 호환성 [ 편집 ] MZ 실행 파일은 DOS와 윈도 9x 계열의 OS에서 실행된다. 32비트인 윈도 NT 계열에서도 가상 도스 머신이라는 방식으로 실행할 수 있지만, 그래픽 모드를 사용하는 일부는 안된다. 64비트 윈도에서는 실행할 수 없다. 대신에 DOSBox, DOSEMU, 와인 등을 사용해서 실행할 수 있다. 디지털 마스 Optlink, MS
65 6c6c 6f20 776f 726c 6421 240d 0a Hello world! $.. 기본 머리 부분을 읽기 쉽게 바꾸면 signature = " MZ " extrabytes = 77 pages = 1 relocations = 1 headersize = 2 minmemory = 8 maxmemory = 65535 initSS = 3 initSP = 128 checksum = 0 initIP = 0 initCS = 0 reloctable = 28 overlay = 0 당연히 시작은 " MZ " 다. 그리고 파일이 77바이트이기 때문에 pages = 1로 페이지는 하나뿐이고, 그 페이지의 사용 바이트는 extrabytes = 77이다. 재배치 항목은 relocations = 1개가 있고, 재배치 표는 reloctable = 28에서 시작한다. 기본
지에 올려지는 것처럼 주소를 산정하고, 실제로 특정 메모리로 올려질 때 그 시작점을 0을 기준으로 했던 모든 세그먼트에 더해줘야 한다. 이것이 재배치다. MZ 실행 파일은 이렇게 재배치가 필요한 세그먼트가 사용된 곳를 모두 모아서 재배치 표를 만들어 가진다. 도스는 프로그램을 메모리로 올리면서 재배치 표에 기록된 즉, 프로그램 중에 세그먼트가 사용된 곳을 모두 찾아서 그기에 실제 프로그램이 시작하는 주소, 보다 정확하게는 시작 세그먼트를 더해준다. 재배치 표는 프로그램 중에 세그먼트가 사용된 곳의 주소 ( Segment : Offset ) 의 나열이다. OFFSET TYPE 설명 00h 1 word Offset 0002h 1 word 재배치 Segment 재배치 항목의 하나는 이렇게 Offset과 Segment가 각 한 워드씩 총 4바이트를
Overlay number WORD e - res [ 4 ] ; / / Reserved words WORD e - oemid ; / / OEM identifier ( for e - oeminfo ) WORD e - oeminfo ; / / OEM information ; e - oemid specific WORD e - res2 [ 10 ] ; / / Reserved words LONG e - lfanew ; / / File address of new exe header } IMAGE - DOS - HEADER, * PIMAGE - DOS - HEADER ; 재배치 정보 [ 편집 ] COM 처럼 64KiB 안에서만 움직인다면 프로그램을 만드는 순간에 모든 주소를 분명하게 알 수 있다. 이렇게 만들어진 프로그램은 메모리의 어떤 위치에 올리게 되더라도 시작점을
어 있다. 대부분은 어떤 제품으로 만들어졌는지를 표시하는 정도이고, 진짜로 해당 제품만을 위한 것은 구체적인 정보가 없는 상태다. 마이크로소프트의 새 실행 파일 형식인 PE도 기본은 MZ이기 때문에 덧붙인 머리에 PE 머리에 대한 정보가 추가되어 있다. 아래 구조체는 MS의 SDK에 포함된 것이다. 앞 부분은 변수명만 다르게 정의되었을 뿐 기본 머리와 같다. PE에서 실질적인 의미가 있는 것은 맨 마지막의 e - lfanew 뿐이다. 새 형식의 머리가 어디에 있는지에 대한 정보다. 나머지 덧붙인 정보들은 PE가 만들어질 때까지 여러 제품들이 추가했던 정보들을 모두 반영하기 위한 형식적인 것이다. typedef struct - IMAGE - DOS - HEADER { / / DOS. EX
사용하면 이 프로그램은 77바이트의 아주 작은 MZ 파일이 된다. 00 : 4d5a 4d00 0100 0100 0200 0800 ff 0300 MZM............. 0010 : 8000 00 00 00 1c00 00 0100 00................ 0020 : b802 008e d8b4 09ba 00 cd21 b800 4ccd...........!.. L. 0030 : 2100 00 00 00 00 00 00 00!............... 0040 : 4865 6c6c 6f20 776f 726c 6421 240d 0a Hello world! $.. 기본 머리 부분을 읽기 쉽게 바꾸면 signature
MZ 실행 파일 형식은 DOS에서 .EXE 실행 파일에 사용되는 파일 형식이다. 파일의 맨 앞에 있는 "MZ"라는 아스키 문자열(16진수로는 4D 5A)로 식별할 수 있다. 이런 걸 "매직 넘버"라고 한다. "MZ"는 MS-DOS의 개발자였던 Mark Zbikowski의 머리글자를 딴 것이다. MZ 실행 파일은 기존 COM 실행 파일 대비 새로운 형식이다. 파일은 머리에 릴로케이션 정보를 가지는데, 이것은 여러 세그먼트를 임의의 메모리에 올릴 수 있도록 해준다. 그리고 64KiB보다 큰 실행 파일을 만들 수 있다. 하지만, 옵셋에 대한 64KiB의 한계는 여전하다. 이것은 나중에 나오는 도스 확장자를 사용해서 피할 수 있다. 도스를 통해 구동되는 EXE 프로그램의 환경은 프로그램 세그먼트 프리픽스에서 볼 수 있다.