1

CFF Explorerは、PEファイルからVCコンパイラのバージョンを検出できます。libCMTに静的にリンクされている(dll依存関係なし)exeファイルの「MicrosoftVisualC++8」が表示されます。

それはどのように行われますか?それは私には知られていないPEファイルのいくつかの構造に応答する必要があります。

アップデート:

  1. CFF Explorerは、静的にリンクされたPEファイルの正しいVCコンパイラバージョンを取得できます(msvcmXX.dll、msvcpXX.dll、またはmsvcrXX.dllへのDLL依存関係はありません)
  2. PEオプションヘッダーのLinkerVersion/ImageVersion / SubsytstemVersion / OperratingSystemVersionフィールドをゼロにクリアしても、CFFエクスプローラーは正しいVCコンパイラバージョンを知ることができます。

CFFエクスプローラーは、VCコンパイラのバージョンを検出するために非常に信頼性の高い方法を使用しているようです。

4

1 に答える 1

2

PEヘッダーには、リンカー(またはコンパイラー)に関する情報があります。チェックアウト:

http://wiki.osdev.org/PE

そしてまた:

http://mirror.sweon.net/madchat/vxdevl/papers/winsys/pefile/pefile.htm

PEヘッダーの魔法の言葉があなたの答えの鍵になるかもしれません。

編集

CFFエクスプローラーはコード署名に依存しているようです。私はここにいくつかの興味深い投稿を見つけました:

どのコンパイラがWin32PEを構築したかを判断する

RBerteigの応答では、内部シンボルを使用してコンパイラーを判別できます。

http://www.codeproject.com/Articles/24417/Portable-Executable-PE-Code-Injection-Injecting-a

この投稿から、_mainアドレスはそれを決定するための署名の1つです。

そしてこの投稿: http: //ntcore.com/files/richsign.htm

Microsoftコンパイラの署名についてより多くの手がかりを与えます。

于 2012-12-21T03:45:42.773 に答える