2

Cライブラリさえ存在しない組み込みプロジェクトの1つのライブラリのように、dlopen()、dlsym()、dlclose()、dlerror()を書くことを考えていました(そのため、すでに独自のC / C ++を書いています)そのためのライブラリは、ここ www.libcaprice.com で見つけることができます)。しかし、私を悩ませているのは、この動的ライブラリ ローダーの実装です。http://www.sco.com/developers/devspecs/gabi41.pdfの論文を見てみましたが、再配置と GOT の初期化方法について頭を悩ませているようには見えません。

最初は、ライブラリを fopen() し、ELF ヘッダーを調べて、それが正しい動的ライブラリであることを検証し、dlsym() が使用されているときにいくつかのシンボルを検索するのは簡単だと考えました。これに関する問題は、ライブラリ自体、またはより具体的にはGOTを初期化する必要があることです。また、物事が特定の境界と配置内にあることを確認するために、いくつかの再配置を行う必要があります。

この機能のユーザー空間での実装をいくつか調べましたが、それらはかなり長く、複雑で、文書化されていないようです。したがって、私の質問は本当に次のとおりです。許可されたライセンス、MIT、またはパブリックドメインの下でライセンスされているdydlのスタンドアロンのオープンソース実装はありますか. そうでなければ、何もなく、自分で実装する必要がある場合、誰かが私がどこから始めればよいか正しい方向に向けることができますか?

Application V Binary Interface Specification をリンクしないでください。動的リンクとロードに関する部分は既に読みましたが、再配置の概念を理解できる方法で説明しているものはないようです。

4

1 に答える 1

0

Tools Interface Standards Executable Linkeable Format からの最新のカットとともに、「Linkers and Loaders」という名前の本があり、動的ローダーの実装に必要なものに近づくことができます。この本はおそらく絶版ですが、以下から無料で入手できます。

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

一方、glibc の実装を探している場合は、ほとんどが glibc ソース ディレクトリ内の dlfcn ディレクトリ内に保持されています。潜在的に興味深い出発点は dlfcn/dlopen.c です

于 2012-03-02T17:16:51.727 に答える