@@ -18,6 +18,24 @@ static const char* const PE_CLASSIFY_STRING[] = {
1818 [PE_CLASS_VISUAL_STUDIO_2013 ] = "Visual Studio 2013" ,
1919 [PE_CLASS_VISUAL_STUDIO_2015 ] = "Visual Studio 2015" ,
2020 [PE_CLASS_VISUAL_STUDIO_2017 ] = "Visual Studio 2017" ,
21+ [PE_CLASS_MFC_4_X ] = "Visual C++ 4.x or 6 (MFC 4.x)" ,
22+ [PE_CLASS_MFC_7 ] = "Visual C++ 2002 (MFC 7)" ,
23+ [PE_CLASS_MFC_7_1 ] = "Visual C++ 2003 (MFC 7.1)" ,
24+ [PE_CLASS_MFC_8 ] = "Visual C++ 2005 (MFC 8)" ,
25+ [PE_CLASS_MFC_9 ] = "Visual C++ 2008 (MFC 9)" ,
26+ [PE_CLASS_MFC_10 ] = "Visual C++ 2010 (MFC 10)" ,
27+ [PE_CLASS_MFC_11 ] = "Visual C++ 2012 (MFC 11)" ,
28+ [PE_CLASS_MFC_12 ] = "Visual C++ 2013 (MFC 12)" ,
29+ [PE_CLASS_MFC_14 ] = "Visual C++ >= 2015 (MFC 14)" ,
30+ [PE_CLASS_MFC_4_X_UNICODE ] = "Visual C++ 4.x or 6 (MFC 4.x, Unicode)" ,
31+ [PE_CLASS_MFC_7_UNICODE ] = "Visual C++ 2002 (MFC 7, Unicode)" ,
32+ [PE_CLASS_MFC_7_1_UNICODE ] = "Visual C++ 2003 (MFC 7.1, Unicode)" ,
33+ [PE_CLASS_MFC_8_UNICODE ] = "Visual C++ 2005 (MFC 8, Unicode)" ,
34+ [PE_CLASS_MFC_9_UNICODE ] = "Visual C++ 2008 (MFC 9, Unicode)" ,
35+ [PE_CLASS_MFC_10_UNICODE ] = "Visual C++ 2010 (MFC 10, Unicode)" ,
36+ [PE_CLASS_MFC_11_UNICODE ] = "Visual C++ 2012 (MFC 11, Unicode)" ,
37+ [PE_CLASS_MFC_12_UNICODE ] = "Visual C++ 2013 (MFC 12, Unicode)" ,
38+ [PE_CLASS_MFC_14_UNICODE ] = "Visual C++ >= 2015 (MFC 14, Unicode)" ,
2139 [PE_CLASS_DOTNET_1 ] = ".NET 1.x" ,
2240 [PE_CLASS_DOTNET_2_X ] = ".NET >= 2.x" ,
2341 [PE_CLASS_BORLAND_DELPHI ] = "Borland Delphi" ,
@@ -54,6 +72,33 @@ static PEClassification _pe_classify_imports(const PEFormat* pe,
5472
5573 if (rd_stristr (mod , "libstdc++" ) == mod ) return PE_CLASS_MINGW ;
5674
75+ if (!rd_stricmp (mod , "mfc40.dll" )) return PE_CLASS_MFC_4_X ;
76+ if (!rd_stricmp (mod , "mfc40u.dll" )) return PE_CLASS_MFC_4_X_UNICODE ;
77+
78+ if (!rd_stricmp (mod , "mfc70.dll" )) return PE_CLASS_MFC_7 ;
79+ if (!rd_stricmp (mod , "mfc70u.dll" )) return PE_CLASS_MFC_7_UNICODE ;
80+
81+ if (!rd_stricmp (mod , "mfc71.dll" )) return PE_CLASS_MFC_7_1 ;
82+ if (!rd_stricmp (mod , "mfc71u.dll" )) return PE_CLASS_MFC_7_1_UNICODE ;
83+
84+ if (!rd_stricmp (mod , "mfc80.dll" )) return PE_CLASS_MFC_8 ;
85+ if (!rd_stricmp (mod , "mfc80u.dll" )) return PE_CLASS_MFC_8_UNICODE ;
86+
87+ if (!rd_stricmp (mod , "mfc90.dll" )) return PE_CLASS_MFC_9 ;
88+ if (!rd_stricmp (mod , "mfc90u.dll" )) return PE_CLASS_MFC_9_UNICODE ;
89+
90+ if (!rd_stricmp (mod , "mfc100.dll" )) return PE_CLASS_MFC_10 ;
91+ if (!rd_stricmp (mod , "mfc100u.dll" )) return PE_CLASS_MFC_10_UNICODE ;
92+
93+ if (!rd_stricmp (mod , "mfc110.dll" )) return PE_CLASS_MFC_11 ;
94+ if (!rd_stricmp (mod , "mfc110u.dll" )) return PE_CLASS_MFC_11_UNICODE ;
95+
96+ if (!rd_stricmp (mod , "mfc120.dll" )) return PE_CLASS_MFC_12 ;
97+ if (!rd_stricmp (mod , "mfc120u.dll" )) return PE_CLASS_MFC_12_UNICODE ;
98+
99+ if (!rd_stricmp (mod , "mfc140.dll" )) return PE_CLASS_MFC_14 ;
100+ if (!rd_stricmp (mod , "mfc140u.dll" )) return PE_CLASS_MFC_14_UNICODE ;
101+
57102 if (!rd_stricmp (mod , "msvcp40.dll" )) return PE_CLASS_VISUAL_STUDIO_4 ;
58103 if (!rd_stricmp (mod , "msvcp50.dll" )) return PE_CLASS_VISUAL_STUDIO_5 ;
59104
@@ -82,6 +127,7 @@ static PEClassification _pe_classify_imports(const PEFormat* pe,
82127 return PE_CLASS_VISUAL_STUDIO_2013 ;
83128
84129 if (!rd_stricmp (mod , "msvcp140.dll" ) ||
130+ !rd_stricmp (mod , "msvcp140d.dll" ) ||
85131 !rd_stricmp (mod , "vcruntime140.dll" ))
86132 return PE_CLASS_VISUAL_STUDIO_2015 ;
87133
0 commit comments