운영체제 기본/Linux의 ELF 로딩
외관
Linux v6.12에서 execve() 요청이 새 사용자 프로그램의 첫 명령 실행으로 이어지는 과정을 다룬다. 정적 링크된 ET_EXEC 실행 파일을 기준으로 파일 형식의 판별, ELF 세그먼트의 배치, 초기 스택과 레지스터 준비를 순서대로 읽는다. 사용자 모드 진입은 x86-64와 RISC-V RV64를 비교한다.
읽는 순서
- execve와 실행 이미지 교체: 실행 파일을 열고 binfmt 핸들러를 선택하며 기존 실행 이미지를 교체하는 과정.
- ELF 세그먼트와 주소 공간: ELF 구조, PT_LOAD에 따른 파일 매핑과 BSS의 0 초기화.
- 초기 스택과 사용자 모드 진입: 인자와 초기 스택, x86-64·RV64의 사용자 진입, 마지막으로 동적 링킹의 차이.
파일 매핑과 페이지 폴트는 가상 메모리와 Linux의 파일 메모리 매핑에서 이어진다.