2012-03-02 8 views
2

私は、Cライブラリが存在しない埋め込みプロジェクトのライブラリのように、dlopen()、dlsym()、dlclose()、dlerror()を書くことを検討しています。私は既に自分自身のC/C++ライブラリを書いていますが、ここにwww.libcaprice.comがあります)。しかし、私の悩みは、この動的ライブラリローダーを実装することです。私は論文を見てきました:http://www.sco.com/developers/devspecs/gabi41.pdfしかし、私は再配置の周りに私の頭を包んでいるとGOTをどのように初期化するように見えることができません。ランタイムライブラリローダーの実装

最初に、ライブラリをfopen()してELFヘッダーを調べ、正しい動的ライブラリであることを確認してから、dlsym()が使用されたときにいくつかのシンボルを検索してください。この問題は、ライブラリそのものを初期化する必要があること、または具体的にはGOTを初期化する必要があることです。物事が証明の範囲内にあることを確実にするために何らかの移転が必要です。

私は、この機能のユーザー空間の実装を見てきましたが、かなり長く、複雑で、文書化されていないようです。ですから私の質問は本当にあります:許可されたlicene、MITまたはパブリックドメインの下で許可されているdydlの独立型オープンソース実装がありますか?それ以外の場合は、私は自分自身を実装する必要があります誰かが私がどこで始めることができる正しい方向に私を指すことができますか?

私はすでに動的リンクとロードに関する部分を読んでいるので、アプリケーションVバイナリインターフェイス仕様をリンクしないでください。わかりやすい方法で再配置の概念を説明するものはありません。

答えて

0

「Linkers and Loaders」という本があり、Tools Interface Standards Executable Linkeable Formatの最新のカットに加えて、ダイナミックローダーの実装に近づくかもしれません。本は絶版おそらくですが、それは以下の自由に利用可能です:あなたはglibcの実装を探しているなら、一方

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

、それは主にglibcのソースディレクトリ内のDLFCNディレクトリ内に保たれています。潜在的に興味深い出発点はdlfcn/dlopen.cです。