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