링커, 로더, 실행 파일

공유 라이브러리에서 사용되는 GOT(전역 오프셋 테이블)의 역할로 올바른 것은?

  1. A라이브러리 함수의 이름을 알파벳순으로 나열한 목차이다
  2. B캐시에 다 들어가지 못한 데이터를 임시로 두는 표이다
  3. C외부 변수나 함수의 실제 주소를 모아 둔 표로, 실행 시 동적 링커가 채우고 코드는 이 표를 통해 참조한다
정답과 해설 보기

정답: C. 외부 변수나 함수의 실제 주소를 모아 둔 표로, 실행 시 동적 링커가 채우고 코드는 이 표를 통해 참조한다

위치 독립 코드는 다른 라이브러리에 있는 변수의 주소를 명령에 직접 쓸 수 없습니다. 그래서 각 모듈에 주소를 늘어놓은 표(GOT)를 준비하고, 코드는 PC로부터의 거리로 GOT의 항목을 읽어 거기에 들어 있는 주소를 사용합니다. 동적 링커는 읽어 들일 때 GOT에 실제 주소를 써 넣습니다. 고쳐 쓰는 것은 쓰기 가능한 데이터인 GOT뿐이므로 코드 페이지는 공유한 채로 둘 수 있습니다.

  • A. 목차가 아니라 주소의 표입니다.
  • B. 캐시와는 관계가 없습니다.
  • C. 올바릅니다. 고쳐 쓰는 것은 데이터 표뿐이며 코드는 고쳐 쓰지 않습니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 동적 링크에서 PLT(프로시저 링키지 테이블)를 사용한 지연 바인딩(레이지 바인딩)을 하는 경우의 설명으로 올바른 것은?
  2. Linux에서 동적 링크 프로그램을 시작할 때 동작하는 동적 링커(ld.so 등)의 역할로 올바른 것은?
  3. ASLR(주소 공간 배치 무작위화)의 목적으로 올바른 것은?
  4. 실행 파일을 PIE(위치 독립 실행 파일)로 만드는 주된 이유는?
  5. 프로그램을 시작할 때(Linux의 execve 등) OS의 로더가 하는 일로 올바른 것은?

이 분야의 비교