VC バージョンを区別するためのヒントの 1 つのソースは、リンクされている特定の C ランタイム ライブラリです。デフォルトのケースは (少なくとも最近のバージョンでは) DLL にリンクするため、これはかなり簡単に行うことができます。ユーティリティDependency Walkerは、どの DLL が実際にロードされているかを確認するために不可欠であり、どの C ランタイム DLL が使用されているかを教えてくれます。Dependency Walker は Microsoft Platform SDK に含まれていますが、独立して拡張されており、リンクしたサイトは現在の開発のホームです。
VC6 と MinGW はどちらもデフォルトで MSVCRT.DLL にリンクしているため、これらを区別することはできません。少し努力すれば、MinGW を新しい C ランタイム バージョンにもリンクさせることができるため、MinGW を個別に除外する必要があります。
Runtime VC Version
---------- -------------
MSVCRT.DLL VC6
MSCVR80.DLL VC8 (VS 2005)
MSCVR90.DLL VC9 (VS 2008)
他のランタイム DLL も良い手がかりになります。たとえば、Delphi のランタイムへの参照は、EXE が実際には Delphi から構築されたものであり、C ツールチェーンではまったくないことを示している可能性があります。
シンボルが .EXE ファイルから削除されていない場合は、内部シンボルが存在する手がかりを見つけることができます。たとえば、次のような参照は_sjlj_init
、setjmp/longjmp 例外処理用に構成された MinGW GCC 3.x がある時点で関与していたことを示している可能性があります。