3

Я вижу несколько COM-файлов в моей 64-битной папке Windows\System32:

chcp.com
diskcomp.com
diskcopy.com
format.com
mode.com
more.com
tree.com

Кто-нибудь случайно знает:

  • Почему они имеют расширение COM? (то есть они действительно COM-файлы?)
  • Задокументирован ли их формат файла? (Случайно ли они совпадают с 64-битными EXE PE файлами?)

3 ответа3

5

COM-файлы являются пережитком дней MS-DOS. Тогда они имели значение , однако теперь они устарели. Сегодня COM-файлы на самом деле являются EXE-файлами, но сохраняют расширение COM для обратной совместимости со старыми программами DOS и Windows.

1

Расширение имени файла не имеет ничего общего с форматом файла образа исполняемой программы, и даже не делало этого во времена MS-DOS.

Не запутайтесь в расширениях файлов. Существует формат файла изображения программы "COM", который является довольно простым форматом изображения программы. Он был заменен форматом файла образа программы "MZ" еще в 1980-х годах (который, в свою очередь, был заменен форматом файла образа программы "PE" и некоторыми другими). Но это не имеет ничего общего с расширением имени файла.

Файл образа программы для MS-DOS/PC-DOS/DR-DOS может иметь любое расширение .COM или расширение .EXE , но фактический формат файла изображения не продиктован этим. Сейчас это так же верно для 64-битной Windows NT 6.1, как и для MS-DOS версии 3.3 в 1980-х годах. Расширение имени файла теперь не диктуется, и (фактически , учитывая, как рано это изменилось в истории 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 долгое время были программами Win32, использующими формат PE.

1

Тестирование исполняемых файлов с использованием инструмента GNU File показывает, что они на самом деле являются 32-битными исполняемыми файлами .

file.exe C:\Windows\System32\format.com
C:\Windows\System32\format.com; Исполняемый файл PE32 для MS Windows (консоль) Intel 80386 32-bit

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .