COM

来自osdev
Zhang3讨论 | 贡献2022年2月28日 (一) 08:17的版本 (创建页面,内容为“'''这里是关于可执行文件的格式,而不是微软的Component Object Model''' {{Stub}} {{File formats}} ==COM文件== ===导言=== COM文件是非常简单的可执行文件。 它们在加载程序时非常有用,不会出现诸如重新定位符号、读取文件头等复杂情况。 然而,它们的简单性可能会使它们的实用性受到限制,因此一旦操作系统升级,您可能希望支持更复杂但有用的东西,比…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

这里是关于可执行文件的格式,而不是微软的Component Object Model

This article is a stub! 此页面或段落为 草稿。 你可以通过更精确的编辑贡献 来帮助本wiki。

可执行文件格式
Microsoft

16 bit:
COM
MZ
NE
32/64 bit:
PE
Mixed (16/32 bit):
LE

*nix

COM文件

导言

COM文件是非常简单的可执行文件。 它们在加载程序时非常有用,不会出现诸如重新定位符号、读取文件头等复杂情况。 然而,它们的简单性可能会使它们的实用性受到限制,因此一旦操作系统升级,您可能希望支持更复杂但有用的东西,比如ELF

COM文件曾被MS-DOS使用。 它们是原始二进制文件,这意味着没有头数据。 此外,COM文件的大小限制为一个段(实地址模式段,64kb)减去256字节。 加载COM文件时,假定所有代码和数据都塞入一个段,并加载到偏移量0x100。

MS-DOS创建并存储一个信息结构,从偏移量0开始,在0x100之前结束,称为程序段前缀(Program Segment Prefix-PSP)。 PSP是在COM程序启动前制作的。 更多关于PSP的信息可以在 这里找到。 PSP仅用于运行DOS程序。

COM文件通常以RET指令终止。 在DOS上,RET从堆栈中弹出一个空字,这会导致调用中断0x20(DOS API的出口)。

装载

要加载COM文件,需要将其加载到内存较低的位置,用0x100 org将ds和es指向文件的开头,然后用偏移量0x100跳转到开头。(译者注:Intel内存地址使用是递增的?)

另见

可执行文件

16位

32位