링커, 로더, 실행 파일

공유 라이브러리를 만들 때, 외부에서 사용하는 함수만 공개하고 내부 함수는 심볼의 가시성(visibility)을 「hidden」으로 하는 이점으로 올바른 것은?

  1. A내부 함수가 암호화되어 분석할 수 없게 된다
  2. B동적 링커가 다루는 심볼이 줄어 로딩이 빨라지고, 내부 호출도 PLT를 거치지 않아도 된다
  3. C라이브러리를 어떤 OS에서도 실행할 수 있게 된다
정답과 해설 보기

정답: B. 동적 링커가 다루는 심볼이 줄어 로딩이 빨라지고, 내부 호출도 PLT를 거치지 않아도 된다

공유 라이브러리의 공개된 심볼은 다른 모듈의 같은 이름의 정의로 교체될 가능성이 있으므로, 내부에서의 호출도 PLT나 GOT를 거쳐야 합니다. hidden으로 하면 외부에서 보이지 않게 되어 동적 링커가 조사하는 심볼의 수가 줄고, 내부 호출은 PC 상대로 직접 수행할 수 있습니다. 다른 라이브러리와의 이름 충돌도 피할 수 있고, 공개하는 ABI도 작게 유지할 수 있습니다.

  • A. 암호화되지는 않습니다.
  • B. 올바릅니다. 이름 충돌도 막을 수 있습니다.
  • C. OS의 차이를 흡수하는 것이 아닙니다.
이 분야 연습하기 분야로 돌아가기

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

  1. C++에서 전역 오브젝트의 생성자가 main보다 먼저 실행되는 구조로 올바른 것은?
  2. 컴파일러가 하나의 소스 파일에서 출력하는 오브젝트 파일(.o)에 대한 설명으로 올바른 것은?
  3. 링커의 주된 역할로 올바른 것은?
  4. 링커가 수행하는 심볼 해석에 대한 설명으로 올바른 것은?
  5. 링커가 수행하는 재배치(리로케이션)에 대한 설명으로 올바른 것은?

이 분야의 비교