링커, 로더, 실행 파일
C 언어 프로그램에서 OS가 가장 먼저 실행을 시작하는 주소(엔트리 포인트)에 대한 설명으로 올바른 것은?
- A반드시 main 함수의 시작이다
- B실행 파일의 첫 번째 바이트로 정해져 있다
- C보통은 main이 아니라 _start 같은 시작용 코드이며, 초기화를 한 뒤 main을 호출한다
정답과 해설 보기
정답: C. 보통은 main이 아니라 _start 같은 시작용 코드이며, 초기화를 한 뒤 main을 호출한다
링커는 C 런타임이 준비한 시작용 오브젝트(crt1.o 등)를 프로그램에 포함시키고, 그 안의 _start를 진입점으로 삼습니다. _start는 스택에서 명령줄 인수를 꺼내고, 표준 라이브러리나 전역 오브젝트의 초기화를 수행한 뒤 main을 호출합니다. main이 반환하면 그 반환값을 사용해 exit를 호출하고 종료 처리를 합니다.
- A. main 앞에서 준비 처리가 동작합니다.
- B. 진입점 주소는 ELF 헤더에 기록됩니다.
- C. 올바릅니다. C 런타임이 준비하는 시작 코드입니다.