Hello World 가 .com 파일과 .exe 용량이 다른 이유.
안녕하세요.
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
결국 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에 참 고맙네요.
감사합니다.
'습작 및 R&D' 카테고리의 다른 글
삼국지3의 Intro에서 사용되는 한글 추출하는 방법. (0) | 2023.04.26 |
---|---|
DOSBOX 빌드 관련. (0) | 2023.04.20 |
ascii 에 할당된 캐릭터 값의 의미. (0) | 2023.04.12 |
CHIP8 Brix 관련 분석 내용. (0) | 2023.04.11 |
x86은 encoding 자체가 너무 복잡하네요. (0) | 2022.02.21 |