링커, 로더, 실행 파일
공유 라이브러리를 만들 때, 외부에서 사용하는 함수만 공개하고 내부 함수는 심볼의 가시성(visibility)을 「hidden」으로 하는 이점으로 올바른 것은?
- A내부 함수가 암호화되어 분석할 수 없게 된다
- B동적 링커가 다루는 심볼이 줄어 로딩이 빨라지고, 내부 호출도 PLT를 거치지 않아도 된다
- C라이브러리를 어떤 OS에서도 실행할 수 있게 된다
정답과 해설 보기
정답: B. 동적 링커가 다루는 심볼이 줄어 로딩이 빨라지고, 내부 호출도 PLT를 거치지 않아도 된다
공유 라이브러리의 공개된 심볼은 다른 모듈의 같은 이름의 정의로 교체될 가능성이 있으므로, 내부에서의 호출도 PLT나 GOT를 거쳐야 합니다. hidden으로 하면 외부에서 보이지 않게 되어 동적 링커가 조사하는 심볼의 수가 줄고, 내부 호출은 PC 상대로 직접 수행할 수 있습니다. 다른 라이브러리와의 이름 충돌도 피할 수 있고, 공개하는 ABI도 작게 유지할 수 있습니다.
- A. 암호화되지는 않습니다.
- B. 올바릅니다. 이름 충돌도 막을 수 있습니다.
- C. OS의 차이를 흡수하는 것이 아닙니다.