링커, 로더, 실행 파일
동적 링크에서 PLT(프로시저 링키지 테이블)를 사용한 지연 바인딩(레이지 바인딩)을 하는 경우의 설명으로 올바른 것은?
- A공유 라이브러리 함수의 주소는 그 함수가 처음 호출될 때 해석되고, 두 번째부터는 해석이 끝난 주소로 곧바로 점프한다
- B프로그램을 시작하기 전에 모든 함수의 주소를 반드시 해석해 둔다
- C함수를 호출할 때마다 라이브러리 파일을 디스크에서 다시 읽는다
정답과 해설 보기
정답: A. 공유 라이브러리 함수의 주소는 그 함수가 처음 호출될 때 해석되고, 두 번째부터는 해석이 끝난 주소로 곧바로 점프한다
프로그램은 외부 함수를 PLT의 작은 입구를 통해 호출합니다. 지연 바인딩에서는 첫 호출 때 입구가 동적 링커의 해석 처리로 점프하여 진짜 주소를 찾아 GOT에 써 넣습니다. 두 번째부터는 GOT의 주소로 곧바로 점프합니다. 사용되지 않는 함수의 해석을 생략할 수 있으므로 시작이 빨라집니다. 다만 안전을 위해 시작할 때 모두 해석하고 GOT를 읽기 전용으로 만드는 설정도 널리 쓰이고 있습니다.
- A. 올바릅니다. 사용하지 않는 함수의 해석을 생략할 수 있습니다.
- B. 그것은 시작할 때 모두 해석하는 방식(즉시 바인딩)입니다.
- C. 디스크에서 다시 읽는 일은 없습니다.