2012-03-02 2 views
2

저는 C 라이브러리조차 존재하지 않는 내 임베디드 프로젝트 중 하나에 대해 라이브러리와 마찬가지로 dlopen(), dlsym(), dlclose(), dlerror()를 작성하려고했습니다. 나는 이미 www.libcaprice.com에서 찾을 수있는 내 자신의 C/C++ 라이브러리를 썼다.) 하지만 저를 괴롭히는 것은이 동적 라이브러리 로더를 구현하는 것입니다. 나는 종이를 살펴 봤다 : http://www.sco.com/developers/devspecs/gabi41.pdf하지만 재배치와 내 머리를 감싸는 것처럼 보일 수 없다. 어떻게 GOT를 초기화 하는가?런타임 라이브러리 로더 구현

처음에는 라이브러리를 fopen()하고 ELF 헤더를 건너 뛰고 올바른 동적 라이브러리인지 확인한 다음 dlsym()을 사용할 때 몇 가지 심볼을 검색해야한다는 것을 알았습니다. 이 문제는 라이브러리 자체를 초기화해야하거나보다 구체적으로 GOT를 초기화해야하는 것입니다. 또한 상황이 certian 범위와 allignment에 있는지 확인하기 위해 일부 재배치가 필요합니다.

이 기능의 일부 사용자 공간 구현을 살펴 보았는데, 다소 길고 복잡하며 문서화되지 않은 것처럼 보입니다. 그래서 제 질문은 실제로 : dysl의 독립 실행 형 오픈 소스 구현이 허가 된 이땅, MIT 또는 공용 도메인에서 허용되는 것이 있습니까? 그렇지 않으면 아무 것도없는 경우, 나는 내 자신을 구현해야합니다, 누군가가 나를 시작할 수있는 올바른 방향으로 나를 가리킬 수 있습니까?

동적 연결 및로드에 대한 부분을 이미 읽었으므로 Application V Binary Interface Specification을 연결하지 마십시오. 이해할 수있는 방식으로 재배치 개념을 설명하는 것은 없습니다.

답변

0

"Linkers and Loaders"라는 책이 있으며 Tools Interface Standards Executable Linkeable Format의 최신 컷과 함께 동적 로더를 구현하는 데 더 가까이 다가 갈 수 있습니다. 그것은 대부분의 glibc 소스 디렉토리 안에 dlfcn 디렉토리 내에 보관있어, 한편

http://www.iecc.com/linker/

, 당신은 glibc에 구현 찾고있는 경우 :이 책은 아마 절판이지만, 아래 자유롭게 사용할 수 있습니다 . 잠재적 인 흥미로운 출발점은 dlfcn/dlopen.c

입니다.
관련 문제