Dependency Walker によると、エクスポートする関数の一部で重複するのはucrtbase.dll
なぜですか?vcruntime140.dll
免責事項:これは現在、私にとって純粋に学術的な関心事です。
現在、Microsoft Visual-C++ CRT 関連の DLL ファイルのレイアウトを理解しようとしています。ここで、UCRT とファイル全般に関する情報を検索します。
つまり、通常の C++ アプリでは、実行時に次の (トップレベルの) DLL 依存関係があります。
ucrtbase.dll
- 「コンパイラに依存しない」ものvcruntime<ver>.dll
- 「コンパイラ依存」のものmsvcp<ver>.dll
- C++ 標準ライブラリ
この情報から強調できることは次のとおりです。
ブログエントリから:
... CRT を 2 つの論理部分に分割します。VCRuntime には、プロセスの起動や例外処理などに必要なコンパイラ サポート機能が含まれていました ...
およびMSDNページから:
vcruntime ライブラリには、例外処理とデバッグ サポート、ランタイム チェックと型情報、実装の詳細、特定の拡張ライブラリ関数など、Visual C++ CRT 実装固有のコードが含まれています。このライブラリは、使用するコンパイラのバージョンに固有です。
Dependency WalkerでDLL を参照しているときに、ucrt と vcruntime の両方が関数をエクスポートしていることに気付きました_CxxThrowException
。この関数は、vc++ スタック トレースを見たことがあれば、よく知っているものです。
例外レコードを構築し、ランタイム環境を呼び出して例外の処理を開始します。
ucrtbase.dll
上記の両方の引用が示すように、これが asからエクスポートされたことに非常に驚いています。私は、この機構がコンパイラー固有の側面にしっかりと属していると思っていたでしょう。
memcpy
これを書いているときに、他のいくつかの重複に気付きました: 標準 C ライブラリ関数 ( 、...、 、...)のごく一部はstrstr
からもエクスポートされvcruntime140.dll
ますが、ucrtbase
.
では、ここで何が起こっていて、これから何を学べるでしょうか?