DOS MZ可执行文件
外观
此条目可参照英语维基百科相应条目来扩充。 (2022年8月3日) |
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无法原生运行。替代方法是运行这些模拟器程序,例如DOSBox、DOSEMU和Wine。
MZ DOS可执行文件可由链接器生成,如Digital Mars Optlink、微软链接器、VALX或Open 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标明。
参见
[编辑]- MZ EXE header format((页面存档备份,存于互联网档案馆)(英文))