링커, 로더, 실행 파일

프로그램을 시작할 때(Linux의 execve 등) OS의 로더가 하는 일로 올바른 것은?

  1. A소스 코드를 읽어 들여 그 자리에서 컴파일한 다음 실행한다
  2. B실행 파일의 프로그램 헤더에 따라 각 부분을 메모리에 배치하고, 스택에 인수 등을 준비한 뒤 진입점 주소부터 실행을 시작한다
  3. C실행 파일의 모든 심볼 이름을 화면에 표시한 다음 실행한다
정답과 해설 보기

정답: B. 실행 파일의 프로그램 헤더에 따라 각 부분을 메모리에 배치하고, 스택에 인수 등을 준비한 뒤 진입점 주소부터 실행을 시작한다

로더는 실행 파일의 헤더를 읽고, 프로그램 헤더에 적힌 각 부분(세그먼트)을 읽기, 쓰기, 실행 권한을 붙여 가상 주소 공간에 대응시킵니다. BSS를 위한 0 영역과 스택을 준비하고, 명령줄 인수와 환경 변수를 스택에 쌓습니다. 동적 링크라면 동적 링커를, 그렇지 않으면 실행 파일의 진입점 주소부터 실행을 시작합니다.

  • A. 실행 파일은 이미 기계어입니다.
  • B. 올바릅니다. 메모리 준비와 시작이 로더의 일입니다.
  • C. 심볼 이름을 표시하는 일은 없습니다.
이 분야 연습하기 분야로 돌아가기

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

  1. C 언어 프로그램에서 OS가 가장 먼저 실행을 시작하는 주소(엔트리 포인트)에 대한 설명으로 올바른 것은?
  2. C 언어의 main 함수가 「return 3;」으로 끝났을 때, 그 값 3은 일반적으로 어떻게 되는가?
  3. 실행 파일에 strip 명령을 사용했을 때 일어나는 일로 올바른 것은?
  4. 링커에서 약한 심볼(weak symbol)의 취급으로 올바른 것은?
  5. C++ 컴파일러가 함수 이름에 인수 타입 등의 정보를 덧붙여 심볼 이름을 만드는 「이름 장식(맹글링)」의 주된 목적은?

이 분야의 비교