Определение, какой компилятор создал PE Win32

Из руководств Apple по размеру и разрешению изображения новый iPad Pro (12,9 3-го поколения) использует @ 2x.

10
задан kquinn 18 April 2009 в 22:10
поделиться

3 ответа

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

11
ответ дан 3 December 2019 в 23:15
поделиться

Другой вариант - проверить, на какую библиотеку CRT ссылается dll, используя depen.exe
. У MinGW и Cygwin есть свои собственные dll, которые вполне очевидно для распознавания.
VC6 обычно использует MSVCRT.dll
любая новая версия VS имеет свою версию рядом с именем файла DLL:
MSVCR90.dll - VS2008
MSVCR80.dll - VS2005
MSVCR71.dll - VS2003
MSVCR70.dll - VS2002

Не используйте этот список в качестве окончательного руководства, поскольку эти названия, как правило, имеют странные различия, особенно в области VS2002-2003. Существуют также другие dll, такие как dll MFC и ATL, которые имеют похожую схему управления версиями.

Это будет работать до тех пор, пока PE фактически зависит от CRT, и оно не связывается с ним статически.

Я думаю, что Delphi также есть какая-то DLL, на которую он ссылается, но я не совсем уверен, что это такое.

2
ответ дан 3 December 2019 в 23:15
поделиться

часть анализа, который выполняет IDA-Pro , содержит некоторый компилятор признание. После того, как вы откроете PE для анализа, посмотрите журнал вывода. обычно он где-то там похоронен.

1
ответ дан 3 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: