직접 바인딩

Direct binding

직접 바인딩은 Solaris OpenSolaris에서의 링커다이내믹링커의 기능입니다.라이브러리가 심볼을 약하게 바인드하지 않고 다른 라이브러리로 직접 바인드할 수 있도록 하고 동적 링커를 남겨 어떤 라이브러리가 심볼을 포함하는지 알아내는 방법을 제공합니다.

이론.

공유 라이브러리 또는 동적 링크 실행 파일을 링크할 때 링커는 일반적으로 해당 라이브러리의 기호 테이블을 필요한 모든 기호로 채웁니다.오프셋과 함께 현재 개체에 기호를 추가하고 개체에서 정의되지 않은 기호를 확인하지 않은 상태로 둡니다.해결되지 않은 심볼은 링크 시에도 알 수 있어야 하지만 링커는 링크할 공유 라이브러리를 전달받으며 다른 라이브러리에서 심볼을 발견하면 출력 라이브러리에 이러한 다른 공유 라이브러리에 의존함을 나타내는 메모를 배치합니다.

이러한 종류의 약한 링크로 인해 동적 링커는 실행 파일이 실행될 때 어떤 라이브러리가 어떤 기호를 포함하는지 확인해야 합니다.예를 들어 Linux 상의 다이내믹링커는 ELF 오브젝트의 DT_NEED 섹션을 읽고 필요한 라이브러리를 로드하지만 필요한 기호가 어디에 있는지 알 수 없습니다.이 경우 오브젝트 내의 확인되지 않은 각 기호를 반복하고 로드된 각 라이브러리를 반복하여 일치하는 기호를 찾을 때까지 확인해야 합니다.이 작업은 시간이 걸릴 수 있습니다.

직접 링크는 다른 ELF 섹션에 DT_NEED 엔트리에 대한 동등한 포인터 목록을 저장함으로써 이 문제를 회피합니다.각 포인터는 오브젝트 내의 심볼에 대응합니다.따라서 이러한 포인터는 심볼과 DT_NEDED 엔트리 사이에 관계를 만듭니다.이를 통해 링커는 특정 DT_NEDED 엔트리에 의해 지정된 라이브러리를 찾아 모든 심볼에 대해 잠재적으로 모든 라이브러리를 반복하지 않고 각 심볼에 대해 심볼 테이블만 체크할 수 있습니다.

레퍼런스

외부 링크