링커, 로더, 실행 파일

동적 링크에서 PLT(프로시저 링키지 테이블)를 사용한 지연 바인딩(레이지 바인딩)을 하는 경우의 설명으로 올바른 것은?

  1. A공유 라이브러리 함수의 주소는 그 함수가 처음 호출될 때 해석되고, 두 번째부터는 해석이 끝난 주소로 곧바로 점프한다
  2. B프로그램을 시작하기 전에 모든 함수의 주소를 반드시 해석해 둔다
  3. C함수를 호출할 때마다 라이브러리 파일을 디스크에서 다시 읽는다
정답과 해설 보기

정답: A. 공유 라이브러리 함수의 주소는 그 함수가 처음 호출될 때 해석되고, 두 번째부터는 해석이 끝난 주소로 곧바로 점프한다

프로그램은 외부 함수를 PLT의 작은 입구를 통해 호출합니다. 지연 바인딩에서는 첫 호출 때 입구가 동적 링커의 해석 처리로 점프하여 진짜 주소를 찾아 GOT에 써 넣습니다. 두 번째부터는 GOT의 주소로 곧바로 점프합니다. 사용되지 않는 함수의 해석을 생략할 수 있으므로 시작이 빨라집니다. 다만 안전을 위해 시작할 때 모두 해석하고 GOT를 읽기 전용으로 만드는 설정도 널리 쓰이고 있습니다.

  • A. 올바릅니다. 사용하지 않는 함수의 해석을 생략할 수 있습니다.
  • B. 그것은 시작할 때 모두 해석하는 방식(즉시 바인딩)입니다.
  • C. 디스크에서 다시 읽는 일은 없습니다.
이 분야 연습하기 분야로 돌아가기

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

  1. Linux에서 동적 링크 프로그램을 시작할 때 동작하는 동적 링커(ld.so 등)의 역할로 올바른 것은?
  2. ASLR(주소 공간 배치 무작위화)의 목적으로 올바른 것은?
  3. 실행 파일을 PIE(위치 독립 실행 파일)로 만드는 주된 이유는?
  4. 프로그램을 시작할 때(Linux의 execve 등) OS의 로더가 하는 일로 올바른 것은?
  5. C 언어 프로그램에서 OS가 가장 먼저 실행을 시작하는 주소(엔트리 포인트)에 대한 설명으로 올바른 것은?

이 분야의 비교