跳转到内容

DOS MZ可执行文件

维基百科,自由的百科全书

DOS MZ可执行文件(英语:DOS MZ executable)格式是DOS中的.EXE可执行文件格式。

该文件在文件头部ASCII字符串“MZ”(十六进制:4D 5A)标识。“MZ”是MS-DOS开发者之一的马克·茨柏克沃斯基(Mark Zbikowski)的姓名首字母缩写。[1]

DOS MZ可执行文件比COM可执行文件格式更晚出现,并与其有一定差别。DOS可执行文件头部包含了重定位信息,使得多个段能被载入到任意内存地址中,并且支持大于64KB的可执行文件;然而该格式仍然要求相对低的内存限制。这些限制后来通过使用DOS扩展器得以绕过。

DOS EXE程序的执行环境可以在其程序段前缀中找到。

兼容性

MZ DOS可执行文件可在DOS和基于Windows 9x的操作系统中运行。基于Windows NT的32位系统也可以使用内置的DOS虚拟机运行(尽管一些图形模式是不支持的)。64位版本的Windows无法原生运行。替代方法是运行这些模拟器程序,例如DOSBoxDOSEMUWine

MZ DOS可执行文件可由链接器生成,如Digital Mars Optlink、微软链接器VALXOpen Watcom的WLINK。另外FASM可以直接创建它们。

DOS EXE 开头格式说明

  • 00-01h:MZ标志,MS-DOS开发者之一的马克·茨柏克沃斯基(Mark Zbikowski)的姓名首字母缩写。
  • 02-03h:EXE文件最后一个块没有全用完只用了N个字节,即文件长度除以512的余数。
  • 04-05h:EXE文件使用的的数量(每块512个字节),文件长度除以512的
  • 06-07h:重定向项目的个数。
  • 08-09h:该处数据指出了EXE头部大小,一般来说,EXE头部之后紧跟着程序数据。
  • 0A-0Bh:该处数据指出了运行该程序所需的最小内存,如果小于这个内存,程序将不会被加载执行。
  • 0C-0Dh:该处数据指出了运行该程序所需的最大内存,一般为FFFFh。
  • 0E-0Fh:堆栈段在装入模块中的偏移,如:00E5h
  • 10-11h:SP初始值,如:0080h。即SS:SP=00E5:0080。
  • 14-15h:IP初始值。
  • 16-17h:CS在装入模块中的偏移。
  • 18-19h:指出了第一个重定向项目在文件中的偏移,
  • 1A-1Bh:覆盖号(程序驻留为零)。
  • 1C:重定位表,起点由偏移18-19h给出,项数由06-07h标明。

参见

参考资料

外部链接