Файл с расширением .com, который пришёл по почте или найден в старом архиве, — это исполняемый файл формата COM, и двойной клик по нему в современной Windows либо ничего не даст, либо запустит неизвестный код напрямую. Прежде чем открывать такой файл, стоит понять, что именно он собой представляет и откуда взялся, потому что формат исторически был одним из любимых носителей вирусов эпохи DOS.

Ниже разберём, чем COM-файл отличается от привычного EXE, в каких системах он запускается сегодня, как безопасно проверить его содержимое и что делать, если файл не открывается.

Что такое COM-файл

COM — один из старейших форматов исполняемых файлов, появившийся ещё в CP/M и перекочевавший в MS-DOS. Его ключевая особенность — предельно простая структура: файл представляет собой «сырой» образ машинного кода без заголовков, таблиц relocations и метаданных. Система загружает его в память целиком и передаёт управление на первый байт.

Из-за этой простоты размер COM-программы ограничен одним сегментом памяти — код, данные и стек должны уместиться вместе. Исторически это означало потолок примерно в 64 КБ с учётом служебной области. Именно поэтому в формате COM писали небольшие утилиты, резидентные программы и системные команды.

Название расширения никак не связано с доменной зоной .com и с технологией Component Object Model в Windows — это просто совпадение букв. Путаница, однако, породила известную проблему безопасности, о которой ниже.

💡

COM-файл — это исполняемый файл эпохи DOS без заголовка: код загружается в память «как есть». Он не имеет отношения ни к домену .com, ни к технологии COM в Windows.

Чем COM отличается от EXE

Оба формата исполняемые, но устроены принципиально по-разному. EXE-файл (формат MZ) начинается с заголовка, в котором описаны точка входа, таблицы настройки адресов и другие параметры. COM такого заголовка лишён, что делает его компактнее, но накладывает жёсткие ограничения.

КритерийCOMEXE (MZ)
Заголовок файлаОтсутствуетЕсть (сигнатура «MZ»)
Ограничение по размеруОдин сегмент памятиПрактически не ограничен
Настройка адресов (relocations)Не поддерживаетсяПоддерживается
Типичная эпохаCP/M, ранний DOSDOS и далее, Windows
Запуск в современной 64-разрядной WindowsНапрямую не поддерживаетсяТолько 32/64-разрядные версии

Любопытная деталь: если в одном каталоге лежат program.com и program.exe, DOS и командный интерпретатор Windows при запуске по имени без расширения отдадут приоритет именно COM-варианту. Этим пользовались злоумышленники, подкладывая вредоносный COM рядом с легитимным EXE.

Где можно запустить COM-файл сегодня

Начнём с главного ограничения: 64-разрядные версии Windows не содержат подсистемы NTVDM, поэтому 16-разрядные COM-программы на них напрямую не работают. На 32-разрядных версиях Windows подсистема DOS присутствовала, но и там совместимость зависела от конкретной программы.

Реалистичные варианты запуска выглядят так:

  • 🖥️ DOSBox — эмулятор среды DOS, самый простой способ запустить старую COM-утилиту на современном ПК;
  • 💾 виртуальная машина с установленным MS-DOS или FreeDOS — если нужна максимально «честная» среда;
  • 🔧 32-разрядная Windows в виртуальной машине — вариант для программ, рассчитанных на NTVDM;
  • 📟 оригинальное «железо» с DOS — для исследователей и коллекционеров ретро-техники.

В DOSBox запуск сводится к монтированию папки с файлом как диска и вызову программы по имени:

mount c c:\dosprogs

c:

program.com

💡

Если COM-файл — старая игра или утилита, DOSBox почти всегда предпочтительнее виртуальной машины: он проще в настройке и эмулирует звуковые карты эпохи DOS.

Как проверить COM-файл на безопасность

⚠️ Внимание: не запускайте COM-файл, полученный из непроверенного источника, на рабочей системе. Формат исполняемый, и вредоносный код начнёт работать сразу после запуска — без каких-либо диалогов и предупреждений.

До запуска файл стоит исследовать статически. Поскольку COM не имеет заголовка, определить его «на глаз» можно только по содержимому: откройте файл в hex-редакторе и посмотрите первые байты. У EXE в начале будут символы MZ, у COM — сразу машинный код, часто начинающийся с инструкции перехода.

Разумный порядок проверки такой:

  • 🛡️ просканируйте файл установленным антивирусом и при желании — через сервис агрегации сканеров;
  • 🔍 посмотрите строки внутри файла (утилитой типа strings или в hex-редакторе) — иногда там видны пути, команды или сообщения, намекающие на назначение;
  • 🧪 при необходимости запускайте только в изолированной среде: виртуальная машина без доступа к личным данным и общим папкам;
  • 📦 проверьте источник: архивы старого ПО с известных коллекционных ресурсов вызывают меньше вопросов, чем вложение в письме.
📊 Откуда вам попался COM-файл?
Старый архив программ или дискета
Пришёл по почте или мессенджеру
Скачал с сайта с ретро-ПО
Нашёл на своём компьютере

Файл не открывается: разбор типичных ситуаций

Распространённая жалоба — «дважды кликаю, и ничего не происходит» или появляется сообщение о несовместимости. Причина почти всегда одна: вы пытаетесь запустить 16-разрядный код в 64-разрядной среде, где поддержки DOS-программ нет. Это не поломка файла, а ограничение системы.

Проверьте разрядность своей Windows: откройте Параметры → Система → О системе и посмотрите поле «Тип системы». Если там указана 64-разрядная ОС, прямой запуск исключён — используйте DOSBox или виртуальную машину по инструкции выше.

Вторая ситуация — файл вообще не является программой. Расширение .com иногда встречается у файлов, переименованных вручную или получивших его случайно. Если hex-редактор показывает в начале файла сигнатуру архива (PK у ZIP) или читаемый текст, перед вами не исполняемый COM, а файл другого типа с неверным расширением.

☑️ Проверка COM-файла перед запуском

Выполнено: 0 / 5

Конвертация и извлечение содержимого

Вопрос «чем открыть COM-файл» иногда означает не запуск, а желание посмотреть, что внутри. Здесь подход зависит от цели. Для просмотра кода подойдёт дизассемблер: поскольку у COM нет заголовка, инструменту нужно указать, что это 16-разрядный код с базовым смещением 0x100 — именно туда DOS загружает программу после служебной области PSP.

Для извлечения текстовых строк, как уже упоминалось, достаточно утилиты просмотра строк или любого hex-редактора. Автоматической «конвертации» COM в EXE в общем случае не существует — это разные модели программы, и перенос требует переработки кода.

Почему COM загружается по смещению 0x100

Перед кодом программы DOS создаёт блок PSP (Program Segment Prefix) размером 256 байт — там хранятся параметры командной строки и служебные данные. Поэтому первый байт кода COM-файла оказывается по смещению 0x100 от начала сегмента, и дизассемблеру нужно указать эту базу для корректного разбора.

⚠️ Внимание: если неизвестный COM-файл оказался в системной папке Windows или в автозагрузке, а вы его туда не помещали, — это повод провести полное сканирование системы. Легитимные современные программы этот формат практически не используют.

Когда COM-файл — это не программа

Отдельный случай — пользователь ищет «com file», имея в виду файл, связанный с технологией Component Object Model в Windows: библиотеки .dll и .ocx, регистрируемые как COM-компоненты. Это совершенно другая тема: такие файлы не запускаются двойным кликом, а регистрируются в системе командой regsvr32 и используются другими приложениями.

Определить ситуацию просто: если речь об ошибке вида «компонент не зарегистрирован» при запуске какой-то программы — вы имеете дело с COM-компонентом, и решать проблему нужно через переустановку этой программы или регистрацию нужной библиотеки, а не через DOS-формат.

💡

Расширение .com почти всегда означает DOS-программу, а ошибки про COM-компоненты в Windows относятся к DLL/OCX-библиотекам — это разные механизмы, и смешивать их не стоит.

Часто задаваемые вопросы

Можно ли запустить COM-файл в Windows 10 или 11?

Напрямую — нет, если у вас 64-разрядная система: в ней нет подсистемы DOS. Используйте эмулятор DOSBox или виртуальную машину с FreeDOS либо MS-DOS.

COM-файл — это вирус?

Не обязательно, но формат исторически часто использовался вредоносными программами из-за простоты структуры и приоритета над EXE при запуске. Любой COM-файл из неизвестного источника нужно сначала проверить антивирусом и запускать только в изолированной среде.

Чем COM отличается от BAT?

BAT — это текстовый сценарий с командами интерпретатора, который можно открыть в «Блокноте». COM — скомпилированный машинный код, его содержимое не читается как текст.

Почему при вводе имени без расширения запускается COM, а не EXE?

Таков порядок поиска, унаследованный от DOS: при совпадении имён командный интерпретатор проверяет расширения в определённой последовательности, и COM в ней стоит раньше EXE. Поэтому лучше указывать расширение явно.

Можно ли переименовать COM в EXE, чтобы файл запустился?

Нет, это не поможет: проблема запуска в 64-разрядной системе связана не с расширением, а с отсутствием поддержки 16-разрядного кода. Переименование лишь создаст файл, который система не сможет корректно интерпретировать.