私の理解では、これらのライブラリは通常、明示的な実行時リンク (LoadLibrary) でリンクされていますが、ライブラリの小さなサブセットへの記述子を含むインポート ライブラリがまだ存在します。これの理由は何ですか?
よろしくお願いします。
「インポート ライブラリ」はまさにそれです。DLL 内で呼び出す実際の関数のアドレスを含む小さなスタブです。これは、インポート ライブラリが必要な理由を説明する素晴らしい投稿です。同じ (素晴らしい) ブログ で、Windows の世界でリンクがどのように機能するかについても読みたいと思うかもしれません。
また、話のもう一方の端 (実行時間) に興味がある場合は、Windows が必要な DLL をロードする方法に関する優れた記事がいくつかあります。たとえば、MSDNやhereとhereで、プログラムがなぜ/どのように動作するかを理解するのに役立ちます。 LoadLibrary を (直接) 呼び出さない
別の DLL からのコードまたはデータを使用する場合は、それをインポートしています。PE ファイルがロードされるとき、Windows ローダーのジョブの 1 つは、インポートされたすべての関数とデータを検索し、それらのアドレスをロード中のファイルで使用できるようにすることです。
リンカーが IAT に書いた内容に基づいて、ユーザーから DLL をロードするのはローダーです
(NT インサイダーに関するさらに興味深い記事がありましたが、オンラインで見つけることができません)。
それらは「リンカを満足させる」ために存在し、DLL だけには存在しない (存在しなかった) 情報を提供します。