Файл с расширением .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 такого заголовка лишён, что делает его компактнее, но накладывает жёсткие ограничения.
| Критерий | COM | EXE (MZ) |
|---|---|---|
| Заголовок файла | Отсутствует | Есть (сигнатура «MZ») |
| Ограничение по размеру | Один сегмент памяти | Практически не ограничен |
| Настройка адресов (relocations) | Не поддерживается | Поддерживается |
| Типичная эпоха | CP/M, ранний DOS | DOS и далее, 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-редакторе) — иногда там видны пути, команды или сообщения, намекающие на назначение;
- 🧪 при необходимости запускайте только в изолированной среде: виртуальная машина без доступа к личным данным и общим папкам;
- 📦 проверьте источник: архивы старого ПО с известных коллекционных ресурсов вызывают меньше вопросов, чем вложение в письме.
Файл не открывается: разбор типичных ситуаций
Распространённая жалоба — «дважды кликаю, и ничего не происходит» или появляется сообщение о несовместимости. Причина почти всегда одна: вы пытаетесь запустить 16-разрядный код в 64-разрядной среде, где поддержки DOS-программ нет. Это не поломка файла, а ограничение системы.
Проверьте разрядность своей Windows: откройте Параметры → Система → О системе и посмотрите поле «Тип системы». Если там указана 64-разрядная ОС, прямой запуск исключён — используйте DOSBox или виртуальную машину по инструкции выше.
Вторая ситуация — файл вообще не является программой. Расширение .com иногда встречается у файлов, переименованных вручную или получивших его случайно. Если hex-редактор показывает в начале файла сигнатуру архива (PK у ZIP) или читаемый текст, перед вами не исполняемый COM, а файл другого типа с неверным расширением.
☑️ Проверка COM-файла перед запуском
Конвертация и извлечение содержимого
Вопрос «чем открыть 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-разрядного кода. Переименование лишь создаст файл, который система не сможет корректно интерпретировать.