링커, 로더, 실행 파일

C 언어 프로그램에서 OS가 가장 먼저 실행을 시작하는 주소(엔트리 포인트)에 대한 설명으로 올바른 것은?

  1. A반드시 main 함수의 시작이다
  2. B실행 파일의 첫 번째 바이트로 정해져 있다
  3. C보통은 main이 아니라 _start 같은 시작용 코드이며, 초기화를 한 뒤 main을 호출한다
정답과 해설 보기

정답: C. 보통은 main이 아니라 _start 같은 시작용 코드이며, 초기화를 한 뒤 main을 호출한다

링커는 C 런타임이 준비한 시작용 오브젝트(crt1.o 등)를 프로그램에 포함시키고, 그 안의 _start를 진입점으로 삼습니다. _start는 스택에서 명령줄 인수를 꺼내고, 표준 라이브러리나 전역 오브젝트의 초기화를 수행한 뒤 main을 호출합니다. main이 반환하면 그 반환값을 사용해 exit를 호출하고 종료 처리를 합니다.

  • A. main 앞에서 준비 처리가 동작합니다.
  • B. 진입점 주소는 ELF 헤더에 기록됩니다.
  • C. 올바릅니다. C 런타임이 준비하는 시작 코드입니다.
이 분야 연습하기 분야로 돌아가기

링커, 로더, 실행 파일의 다른 문제

  1. C 언어의 main 함수가 「return 3;」으로 끝났을 때, 그 값 3은 일반적으로 어떻게 되는가?
  2. 실행 파일에 strip 명령을 사용했을 때 일어나는 일로 올바른 것은?
  3. 링커에서 약한 심볼(weak symbol)의 취급으로 올바른 것은?
  4. C++ 컴파일러가 함수 이름에 인수 타입 등의 정보를 덧붙여 심볼 이름을 만드는 「이름 장식(맹글링)」의 주된 목적은?
  5. Linux의 dlopen 함수(Windows의 LoadLibrary에 해당)의 용도로 가장 적절한 것은?

이 분야의 비교