Одним из источников подсказки для различия между версиями VC является связанная библиотека времени выполнения C. Так как по умолчанию (по крайней мере в современных версиях) используется ссылка на DLL, это довольно легко сделать. Утилита Dependency Walker практически необходима для проверки того, что вы знаете, какие библиотеки действительно загружаются, и подскажет, какая DLL-библиотека времени выполнения C используется. Несмотря на то, что 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
, вероятно, указывает, что в какой-то момент был задействован MinGW GCC 3.x, настроенный для обработки исключений setjmp / longjmp.