Linux는 인터프리터입니다
이 글은 20MB 크기의 base64 인코딩된 셸 스크립트 형태의 initrd 이미지(rkx.gz)를 분석합니다.
해당 스크립트는 root 권한 확인, kexec, base64, cpio 설치 여부 검사 후 base64를 디코딩해 cpio 아카이브를 생성하고, 이를 ramdisk로 사용하여 새로운 커널 이미지를 kexec로 로드 및 실행하는 구조입니다.
이 과정은 기존 커널을 완전히 대체하는 방식으로, 재귀적으로 자신을 kexec로 호출하는 독특한 루프(꼬리 재귀 최적화된 형태)를 구현하여 무한 재부팅과 커널 교체가 가능합니다.
또한, initrd를 실행 가능한 파일로 인식시키기 위해 Linux의 binfmt_misc 기능을 활용하여 cpio 파일을 특정 인터프리터(QEMU 또는 kexec 스크립트)로 처리하도록 설정하는 방법도 소개합니다.
결론적으로, 이 사례는 Linux 커널과 initrd를 인터프리터와 프로그램으로 보는 관점, 그리고 실행 파일과 스크립트, 심지어 OS 이미지 간의 경계가 모호함을 보여주며, initrd 자체가 자기복제(퀸) 및 재귀적 실행이 가능한 프로그래밍적 존재임을 탐구합니다.