文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
附录 C 可执行文件格式
附录 C
可执行文件格式
DOS 操作系统支持两种不同类型的可执行文件:.exe 文件和.com 文件。前者允许大的程序和在内存中使用多个段,后者用于安装到一个段里面(即,最大 64Kb) 的小程序 [Dun88b]。
C.1 .exe 文件
.exe 文件由一个头部和一个装入模块组成,如图 C-1 所示。文件头部有 28 字节的固定格式区和一个大小可变的重定位表。装入模块是一个完全链接(fully linked) 的程序映像;没有关于如何从模块中分割段的信息,因为 DOS 不管程序如何分段。
图 C-1: .exe 文件的结构
头部格式区的结构见图 C-2 所示。一页的大小是 512 字节,一节(paragraph) 的大小是 16 字节。程序映像的大小用格式区的值计算出来,即文件大小和头部大小之差。文件大小由文件页数(只入不舍) 和最后一页所用字节尺寸给出。
重定位表是一个字指针列表,每个指针指向装入模块里面需要调整的一个字。对这些字的调整就是把它们加上该程序要被装入到的起始段地址。这个表里的指针被储存为相对装入模块的两个字。
字节 | 描述 |
00-01h | .exe 签名(4Dh, 5Ah) |
02-03h | 在最后页中的字节数 |
04-05h | 页数(只入不舍) |
06-07h | 在重定位表中的项目数 |
08-09h | 在头部中的节数 |
0A-0Bh | 数据和堆栈要求的最小节数 |
0C-0Dh | 最大内存节数 |
0E-0Fh | 预先重定位的最初 ss 值 |
10-11h | 最初的 sp 值(绝对数值) |
12-13h | 补足的校验和(二进制反码) |
14-15h | 最初的 ip 值 |
16-17h | 预先重定位的 cs 最初值 |
18-19h | 重定位表偏移量 |
1A-1B | 覆盖数(默认:0000h) |
图 C-2: 固定格式区
C.2 .com 文件
.com 文件是一个没有头部的映像程序(即,相当于一个.exe 文件的装入模块),因此该程序照“原样”被装入内存。与.exe 程序相比,.com 程序只能使用一个段(最大 64Kb)。这些程序被设计用于把 CP/M 程序移植到 DOS 环境。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论