링커, 로더, 실행 파일

Linux에서 동적 링크 프로그램을 시작할 때 동작하는 동적 링커(ld.so 등)의 역할로 올바른 것은?

  1. A소스 코드를 컴파일하여 기계어를 만든다
  2. B필요한 공유 라이브러리를 찾아 메모리에 읽어 들이고, 심볼을 연결한 다음 프로그램을 시작시킨다
  3. C프로그램이 종료된 뒤 디스크의 빈 공간을 정리한다
정답과 해설 보기

정답: B. 필요한 공유 라이브러리를 찾아 메모리에 읽어 들이고, 심볼을 연결한 다음 프로그램을 시작시킨다

동적 링크 실행 파일에는 사용할 동적 링커의 위치가 적혀 있으며, OS는 프로그램을 읽어 들이면 먼저 동적 링커에 처리를 넘깁니다. 동적 링커는 필요한 공유 라이브러리를 찾아 읽어 들이고, 재배치와 심볼 결합을 수행한 다음 프로그램의 진입점으로 제어를 옮깁니다. dlopen으로 실행 중에 라이브러리를 추가로 읽어 들이는 처리도 동적 링커가 담당합니다.

  • A. 컴파일은 컴파일러의 일입니다.
  • B. 올바릅니다. 실행 시 링크를 담당합니다.
  • C. 디스크 정리와는 관계가 없습니다.
이 분야 연습하기 분야로 돌아가기

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

  1. ASLR(주소 공간 배치 무작위화)의 목적으로 올바른 것은?
  2. 실행 파일을 PIE(위치 독립 실행 파일)로 만드는 주된 이유는?
  3. 프로그램을 시작할 때(Linux의 execve 등) OS의 로더가 하는 일로 올바른 것은?
  4. C 언어 프로그램에서 OS가 가장 먼저 실행을 시작하는 주소(엔트리 포인트)에 대한 설명으로 올바른 것은?
  5. C 언어의 main 함수가 「return 3;」으로 끝났을 때, 그 값 3은 일반적으로 어떻게 되는가?

이 분야의 비교