2

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.

では、ここで何が起こっていて、これから何を学べるでしょうか?

4

1 に答える 1

3

Universal CRT (ucrtbase.dll) には、Windows オペレーティング システム コンポーネントで使用するための VCRuntime のプライベート コピーが含まれています。この VCRuntime のプライベート コピーは、オペレーティング システムの内部実装の詳細であり、いつでも変更される可能性があります (つまり、アプリケーションの互換性はまったく保証されません。

どのような状況でも、Universal CRT からのこれらのエクスポートを使用しないでください。(Windows SDK のライブラリは、これらのエクスポート用のリンク可能なシンボルを提供していないため、それらを誤って使用することはありません。)

于 2016-10-22T02:33:44.167 に答える