2023. 4. 21. 14:58

Hello World 가 .com 파일과 .exe 용량이 다른 이유.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.

DOSBox를 보면서 20여년 정도 궁금해 하던걸 테스트 해봤습니다.

왜 TC 2.0에서 빌드한 .exe 파일의 용량이 asm 으로 어셈블한 com 하고 용량 차이가 많이 나는지 항상 궁금했습니다.

제일 작은거라고 링크에 있는건 20 bytes 이고, dosbox에서 빌드한 helloworld.exe는 13,276 bytes네요. 

https://www.gnostice.com/nl_article.asp?id=225&t=The_Smallest_Hello_World_Program_At_20_Bytes

20 byte의 com 파일.

 

TC 2.0에서 빌드한 helloworld exe파일.

 

결국 exe 파일을 실행 시켜서 보니 숨어 있던  interrupt가 있엇기 때문입니다.

일단 Dos Shell에서 해당 파일을 실행 하면 dos interrupt_21에서 해당 파일을 로드 한 후 실행 하는구조인데요.

실제 helloworld 가 실행 되는 구간은 Get Dos version 부분 부터입니다.

아래와 같은 코드가 들어가 있으니 용량이 커질수 밖에 없나 봅니다.

도스에서 com 파일은 512 바이트까지는 그냥 메모리 상에 올려놓는데요,

그 이상의 크기가 되면, Portable Executable 이란 MS의 PE 포멧에 맞는 헤더를 읽어서 메모리 할당 , relocation 작업을 진행 합니다.

메모리 할 당은 메모리 관리 해주는 부분을 통해서 할당이 됩니다.

이후 Video int 10을 통해서 해당 VGA 모드까지 세팅 한 후 , 이제 hello world 를 console에 찍을 준비를 합니다.

이후 int 21, 07을 통해서 press any 키 입력을 기다리는 상태로 있으며,

int 16, 0D는 입력받은 키값이 0D -> 엔터 를 나타 냅니다.

이후 위의 Vector를 다시 세팅 한 후 Shell에 process가 종료 되었다고 알려 줍니다.

DOSBOX-X에 참 고맙네요.

감사합니다.