我在 64 位 Windows\System32 文件夹中看到一些 COM 文件:
chcp.com
diskcomp.com
diskcopy.com
format.com
mode.com
more.com
tree.com
有人知道吗:
- 为什么这些文件有 COM 扩展名?(即,它们是真正的 COM 文件吗?)
- 它们的文件格式有记录吗?(它们和 64 位 EXE PE 文件一样吗?)
答案1
COM 文件是 MS-DOS 时代的遗留物。它们有意义那时,它们已经过时了。如今,COM 文件实际上是 EXE,但保留了 COM 扩展名,以便与较旧的 DOS 和 Windows 程序向后兼容。
答案2
文件扩展名与可执行程序映像文件格式无关,甚至在 MS-DOS 时代也无关。
不要对文件扩展名感到困惑。有一个“COM”程序映像文件格式,这是一种相当基本的程序映像格式。早在 20 世纪 80 年代,它就被“MZ”程序映像文件格式所取代(而后者又被“PE”程序映像文件格式和其他几种格式所取代)。但它与文件扩展名无关。
MS-DOS/PC-DOS/DR-DOS 的程序映像文件可以具有扩展名.COM
或扩展名.EXE
,但实际的映像文件格式不受此限制。现在的 64 位 Windows NT 6.1 和 1980 年代的 MS-DOS 3.3 版本一样。文件扩展名现在不再受限制,并且(有效地,考虑到 MS-DOS 历史的早期变化)从未规定可执行文件的程序映像文件格式。
我提到了 DR-DOS。在 DR-DOS 版本 6 中(如果我没记错的话),几乎所有的程序映像文件(甚至名为 的文件.COM
)实际上都是“MZ”格式的可执行文件,而且还是压缩文件。(在发布该版本的 DR-DOS 时,在 MS-DOS 中,一些程序映像文件仍然使用实际的“COM”格式。)这与您在此处看到的完全相同。名称MODE.COM
、FORMAT.COM
、MORE.COM
等等是程序一直具有的名称,保留了兼容性。但程序映像格式不是“COM”格式。它是“PE”格式。
这其实并不令人意外。毕竟,文件名以“.EXE”结尾的程序(例如ATTRIB.EXE
和COMP.EXE
)是不是“MZ”格式的可执行文件,就像它们曾经在 MS-DOS 上一样,但(也是)“PE”格式的可执行文件;这种情况在 Windows NT 上已经持续了近二十年。毕竟,只有“PE”格式(上述格式)在 Windows NT 上是本机可执行的。“MZ”和“COM”格式只能通过虚拟 DOS 机器来执行。所有这些程序在 Windows NT 上都是使用“PE”格式的 Win32 程序,而且已经持续了很长时间。
答案3
使用测试可执行文件GNU文件工具显示它们实际上只是 32 位可执行文件。
file.exe C:\Windows\System32\format.com
C:\Windows\System32\format.com;适用于 MS Windows(控制台)Intel 80386 32 位的 PE32 可执行文件