로더
로더(Loader)는 운영체제 또는 실행 환경에서 실행 파일과 필요한 코드·데이터를 메모리에 올리고 프로그램을 시작하도록 준비하는 구성 요소다. 링커가 빌드 시 파일과 라이브러리를 결합하는 데 주로 관여하는 반면, 로더는 프로세스를 생성하거나 시작하는 시점의 실행 이미지 매핑과 초기화·...
| 영어 명칭 | Loader |
|---|---|
| 분류 | 프로그램 실행 준비·메모리 적재 구성 요소 |
| 주요 역할 | 실행 이미지 메모리 매핑·진입점 준비 |
| 입력 | ELF·PE/COFF·Mach-O 등 바이너리 |
| 운영체제 | Windows·Linux·macOS·임베디드 RTOS |
| 연결 요소 | 동적 링커·실행 시간 라이브러리 |
| 메모리 보호 | 페이지 권한·ASLR·주소 공간 |
| 기술 구분 | 링커와 다른 실행 단계 |
| Windows 관련 | Windows PE 이미지 로더·ntdll |
| Linux 관련 | execve·ELF interpreter |
| 참조 | ELF gABI |
| Windows 형식 | PE/COFF specification |
로더(Loader)는 운영체제 또는 실행 환경에서 실행 파일과 필요한 코드·데이터를 메모리에 올리고 프로그램을 시작하도록 준비하는 구성 요소다. 링커가 빌드 시 파일과 라이브러리를 결합하는 데 주로 관여하는 반면, 로더는 프로세스를 생성하거나 시작하는 시점의 실행 이미지 매핑과 초기화·진입점 전달에 관여한다. 로더는 하나의 독립 실행 명령일 수도 있고 커널·동적 링크기와 사용자 모드 라이브러리에 분산된 기능일 수도 있다.
프로그램의 바이너리에는 코드·데이터 섹션과 메모리 크기·정렬, 참조하는 라이브러리 및 진입점 정보가 들어 있을 수 있다. 운영체제는 해당 형식을 확인해 매핑·페이지 권한을 설정하고 필요한 동적 라이브러리를 찾으며 초기화 순서를 결정한다. Windows의 PE/COFF와 Linux의 ELF·macOS의 Mach-O는 서로 다른 파일 형식·적재 규칙을 사용한다.[1]
동적 로더는 실행 시 공유 라이브러리의 심벌을 찾거나 필요한 재배치를 적용하고 초기화 코드를 실행할 수 있다. 일부 플랫폼은 지연 바인딩(lazy binding)을 지원하지만 보안·성능·정책 때문에 실제 방식이 달라질 수 있다. ASLR과 실행 방지 정책, 코드 서명·라이브러리 검색 경로는 악성 코드의 주입과 실행 무결성에 관련돼 있어 동적 라이브러리의 위치를 무조건 신뢰해서는 안 된다.
BIOS·UEFI의 부트로더는 OS 커널 이미지를 메모리에 올리는 별도 역할을 수행하므로 일반 사용자 프로그램의 로더와 구분한다. 가상 머신 실행기도 바이트코드 모듈을 읽어 검증·초기화할 수 있지만 이는 CPU 네이티브 실행 파일 로더와 동일한 파일 형식·규약을 필요로 하지는 않는다. 로더는 운영체제 커널과 실행 파일 형식, 언어 런타임을 연결하는 중요한 시스템 소프트웨어다.[2]