13KB 단일 파일 게임, 어떻게 만들었을까?

by DD
4개월 전
조회수 25

13KB 크기의 단일 파일로 제작된 게임이 윈도우, 리눅스, 브라우저에서 실행되어 개발자들의 놀라움(Surprise)을 자아냄

리눅스 실행 파일 분석 결과, PT_DYNAMIC 헤더(Header)의 'unused' 필드를 활용하여 파일 크기를 줄인 것으로 확인됨

윈도우 실행 시 오류 발생, DEP(Data Execution Prevention) 설정 문제로 해결되었으며, 플랫폼별 실행 환경에 대한 논의가 이어짐

실행 파일 크기 최적화 기법

wasmperson의 댓글에 따르면, 개발자는 PT_DYNAMIC 헤더(Header)의 'unused' 필드에 동적 링커(Dynamic Linker)의 이름을 삽입하는 방식으로 파일 크기를 줄였다. 이는 실행 파일의 메타데이터(Metadata)를 활용하여 공간을 절약하는 기술로, 코드 압축(Code Compression)과 함께 파일 크기를 최소화하는 데 기여한다. 이러한 기법은 리버스 엔지니어링(Reverse Engineering)을 어렵게 만들 수 있다.

플랫폼별 실행 환경 분석

zamadatix는 브라우저, 리눅스, 윈도우 환경에서의 실행 결과를 공유했다. 브라우저에서는 .html 확장자로 변경하여 실행 가능했으며, 리눅스에서는 xz 패키지 설치 후 정상 작동했다. 윈도우에서는 DEP 설정을 끄자 실행에 성공했다. 이는 각 플랫폼의 실행 환경(Execution Environment)에 따라 필요한 설정이 다르며, 운영체제(OS)의 보안 기능이 실행에 영향을 미칠 수 있음을 보여준다.

단일 파일 내 멀티 플랫폼 지원

Tiereven은 해당 게임이 실제로는 단일 파일 안에 3개의 실행 파일을 포함하고 있다고 언급했다. 이는 각 플랫폼에 맞는 코드를 개별적으로 포함하여 플랫폼별 최적화(Platform-Specific Optimization)를 가능하게 한다. 기술적으로 보면, 멀티플랫폼 지원(Multi-Platform Support)을 위해 각 운영체제에 맞는 바이너리를 하나의 파일로 묶는 방식을 사용한 것으로 해석된다. 이러한 방식은 코드 재사용성(Code Reusability)을 높이는 데 기여한다.

This game is a single 13 KiB file that runs on Windows, Linux and in the Browser