main() 없이 실행되는 C 프로그램 만들기
Writing a (valid) C program without main()

C 프로그램은 반드시 main()에서 시작한다는 상식을 깨고, 컴파일 파이프라인(전처리기, 컴파일러, 어셈블러, 링커)을 단계별로 따라가며 main() 없는 실행 가능한 바이너리를 만드는 방법을 소개한다. 실제 진입점은 _start이며, C 런타임 시작 코드가 main()을 호출한다는 사실을 이용해 -nostartfiles 옵션과 어셈블리로 직접 _start를 정의하고, glibc 없이 syscall만으로 출력과 종료를 처리하는 순수 C 프로그램을 완성한다.
main()은 편의일 뿐 필수 조건이 아니다. 실제 진입점은 _start이고, 표준 C 런타임은 main()을 호출하는 코드일 뿐이다.