VC2005生成的EXE中的版本信息

VC2005生成的EXE中的版本信息

VC2005生成EXE之外,还生成manifest文件。该文件列出了EXE依赖的各个模块的所有信息。包括模块名,版本,处理器体系结构,及public key

如下是一个manifest文件的内容。

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type='win32'

name='Microsoft.VC80.CRT'

version='8.0.50727.762'

processorArchitecture='x86'

publicKeyToken='1fc8b3b9a1e18e3b' />

    </dependentAssembly>

  </dependency>

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type='win32'

name='Microsoft.VC80.MFC'

version='8.0.50727.762'

processorArchitecture='x86'

publicKeyToken='1fc8b3b9a1e18e3b' />

    </dependentAssembly>

  </dependency>

</assembly>

可以看出,依赖CRTMFC两个模块,版本是8.0.50727.762

并且在EXE文件中,也包含该manifest文件的内容。这样EXE文件本身就是自说明的。

可以使用strings程序提取EXE中的字符串信息。可以看到最后一部分信息就是manifest

当要执行EXE程序时,osloader首先检查EXE依赖的相应版本的模块。如果未发现相应版本的模块时,程序出错。

系统会从<<系统盘/WINDOWS/WinSxS>>目录中查找模块的相应版本。

该目录下的子目录一览如下:

x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_cbb27474

x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.1433_x-ww_5cf844d2

x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.163_x-ww_681e29fb

x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd

x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700

x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c

x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f

x86_Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_c8452471

x86_Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_257740a4

x86_Microsoft.VC80.DebugOpenMP_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_66b81908

x86_Microsoft.VC80.DebugOpenMP_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_c3ea353b

x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_3415f6d0

x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_91481303

x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_dec6ddd2

x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05

x86_Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0ee63867

x86_Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6c18549a

实际项目中,确实出现过因为找不到依赖模块的正确版本,而不能执行的情况。所以一定要留意版本信息。

你可能感兴趣的:(VC2005生成的EXE中的版本信息)