EXE格式

维基百科,自由的百科全书
跳转至: 导航搜索

EXE是在OS/2MS-DOSWindows系统中通用的可执行文件的扩展名,包括以下几种主要的文件格式:

DOS可执行文件:最简单的可执行文件格式,可以在DOS和Windows中运行。它通过在文件头添加ASCII字符串“MZ”(16进制中表示为4D5A)来标识。“MZ”是MS-DOS开发者之一的馬克·茨柏克沃斯基(Mark Zbikowski)的姓名首字母缩写。

16位元新可执行文件:通过在文件头添加ASCII字符串“NE”来标识。它只能运行在Windows和OS/2系统,而不能在DOS下运行。

16/32位元混合式线性可执行文件:通过在文件头添加ASCII字符串“LE”来标识。它仅用来在Windows 3.x和Windows 9x中替代VxD驱动。

32位元线性可执行文件:通过在文件头添加ASCII字符串“LX”来标识。运行在OS/2 2.0以及更高版本中,也可用于某些DOS扩展。

32位元可执行文件:这是最复杂也是目前最流行的可执行文件格式,通过在文件头添加ASCII字符串“PE”来标识。它主要运行于Windows 95Windows NT以及更高版本的Windows中,也可在BeOS R3中运行。在文件头部可见字符串"PE..L" (hex code: 504500004C)。

64位元可执行文件:与前一种类似,但使用支持64位元的中央处理器。因此它仅能在64位元的Windows系统中运行,譬如Windows XP 64-Bit Edition 和 Windows Server 2003 64-Bit Edition。在文件头部可见字符串"PE..d†" (hex code: 504500006486)。

MZ[编辑]

(1) 00-01h:MZ标志,MS-DOS开发者之一的馬克·茨柏克沃斯基(Mark Zbikowski)的姓名首字母缩写。

(2) 02-03h:EXE文件最后一个块没有全用完只用了N个字节,即文件长度除以512的余数。

(3) 04-05h:EXE文件使用的的数量(每块512个字节),文件长度除以512的 通过(2)(3)两个数据可以计算出文件大小 (3)是该文件中块的数量(1个块=512B) (2)是最后一个块的字节数(没有用完512B) 文件长度 = (Block-1) * 512B + Bytes。

(4) 06-07h:重定向项目的个数。 EXE文件加载到内存执行时文件中数据的偏移地址跟内存中 偏移是不一样的,重定向就是达到重新修改偏移的目的。

(5) 08-09h:该处数据指出了EXE头部大小,一般来说,EXE头部之后紧跟着程序数据。 单位是节,1节=16(0x10)字节 如文件偏移0020h*10h=200h。

(6) 0A-0Bh:该处数据指出了运行该程序所需的最小内存,如果小于这个内存,程序将不会被加载执行。

(7) 0C-0Dh:该处数据指出了运行该程序所需的最大内存,一般为FFFFh。

(8) 0E-0Fh:堆栈段在装入模块中的偏移,如:00E5h

(9) 10-11h:SP初始值,如:0080h。即SS:SP=00E5:0080。

(10) 14-15h:IP初始值。

(11) 16-17h:CS在装入模块中的偏移。

(12) 18-19h:指出了第一个重定向项目在文件中的偏移, 如003Eh,表示文件003Eh偏移处存放了第一个重定向项目的内容。

(13) 1A-1Bh:覆盖号(程序驻留为零)。

(14) 1C:重定位表,起点由偏移18-19h给出,项数由06-07h标明。