共有ライブラリの変更

共有ライブラリの変更

共有ライブラリを使用するCプログラムがあるとします。

共有ライブラリを変更して再構築すると、そのライブラリを使用するすべてのプログラムは、次回実行されると自動的にその変更を受け取ります。静的ライブラリーの場合、変更はプログラムが新しいバージョンのライブラリーに再コンパイルされた後にのみ表示されます。

一部の共有ライブラリ関数のコードを変更したり(メソッドシグネチャを変更せずに)、新しい関数を追加するなど、関数のアドレスが変更されます。

共有ライブラリを使用するプログラムは、再コンパイルや再リンクなしでどのようにこれらの機能を再検索できますか?住所が変更された場合。

ベストアンサー1

.soすべてのライブラリはエクスポートされた関数と場所のリストを保持しているからです。

したがって、広く言うと、プログラムが共有ライブラリから関数を取得しようとすると、多段階プロセスが発生します。つまり、エクスポートされた名前のリストを読み、関数名を探し、そのアドレスを取得し、その.soアドレスにあるファイルを読み取ります。

これらの住所を直接見つけるには、こちらをご覧ください。https://en.wikipedia.org/wiki/Executable_and_Linkable_Format

おすすめ記事