COM файл - COM file

COM
Расширение имени файла
.COM
Тип форматаИсполняемый
Расширен доИсполняемый файл DOS MZ
Ряд файлов COM в IBM PC DOS 1.0

А COM файл это тип простого запускаемый файл. На Цифровое оборудование операционные системы 1970-х годов, .COM использовался как расширение имени файла за текстовые файлы содержащие команды, которые будут выданы операционной системе (аналогично командный файл ).[1] С введением CP / Mмикрокомпьютер операционная система), тип файлов, обычно связанных с расширением COM, изменился на исполняемые файлы. Позднее это соглашение было перенесено на ДОС. Даже при дополнении более общим EXE формат файла для исполняемых файлов компактные COM-файлы оставались жизнеспособными и часто использовались под DOS.

В .COM расширение имени файла не имеет отношения к .com (для "коммерческих") доменное имя верхнего уровня в Интернете. Однако это сходство в названии использовалось вредоносное ПО писатели.

Двоичный формат DOS

Формат COM - это исходный двоичный исполняемый формат, используемый в CP / M (включая SCP и MSX-DOS ) а также ДОС. Это очень просто; у него нет заголовка (за исключением файлов CP / M 3),[2] и не содержит стандарта метаданные, только код и данные. За эту простоту приходится платить: двоичный имеет максимальный размер 65 280 (FF00час ) байтов (256 байт меньше 64 КБ) и хранит все свои код и данные в одной сегмент.

Поскольку в нем отсутствует переезд информация, это загружен операционной системой по заранее заданному адресу, со смещением 0100h сразу после PSP, где он выполняется (отсюда и ограничение размера исполняемого файла): входная точка фиксируется на 01:00. Это не было проблемой на 8-битных машинах, поскольку они могут адресовать максимум 64 КБ памяти, но 16-битные машины имеют гораздо большее адресное пространство, поэтому формат вышел из употребления.

в Intel 8080 Архитектура ЦП, можно адресовать только 65 536 байт памяти (диапазон адресов от 0000h до FFFFh). В CP / M первые 256 байтов этой памяти от 0000h до 00FFh были зарезервированы для использования системой нулевая страница, и любая пользовательская программа должна была быть загружена ровно в 01:00 для выполнения. COM-файлы идеально подходят для этой модели. До введения МП / м и Параллельные CP / M, не было возможности запускать более одной программы или команды одновременно: запускалась программа, загруженная в 01:00, и никакая другая.

Хотя формат файлов в DOS и CP / M одинаков, файлы .COM для двух операционных систем несовместимы; Файлы DOS COM содержат x86 инструкции и, возможно, DOS системные вызовы, а файлы CP / M COM содержат 8080 инструкции и системные вызовы CP / M (программы, предназначенные только для определенных машин, могут также содержать дополнительные инструкции для 8085 или же Z80 ).

Файлы .COM в DOS устанавливают все регистры сегмента x86 на одно и то же значение, а регистр SP (указатель стека) - на FFFCh или FFFEh,[3] таким образом, стек начинается с самого верха сегмента памяти и работает оттуда вниз.[4]

В оригинальной DOS 1.x API, который был производным от CP / M API, завершение программы файла .COM будет выполняться путем вызова функции INT 20h (Завершить программу) или функции INT 21h Function 0, которая служила той же цели, и программист также имел чтобы гарантировать, что регистры сегмента кода и данных содержат одно и то же значение при завершении программы, чтобы избежать потенциального сбоя системы. Хотя это могло использоваться в любой версии DOS, Microsoft рекомендовала использовать INT 21h Function 4Ch для завершения программы, начиная с DOS 2.x и далее, что не требовало, чтобы данные и сегмент кода были установлены на одно и то же значение.

Можно сделать файл .COM для работы в обеих операционных системах в виде толстый двоичный файл. На уровне инструкций нет настоящей совместимости; инструкции на входная точка выбраны одинаковыми по функциональности, но разными в обеих операционных системах, и заставляют выполнение программы переходить к разделу для используемой операционной системы. По сути, это две разные программы с одинаковыми функциями в одном файле, которым предшествует код, выбирающий ту, которая будет использоваться.

В CP / M 3, если первый байт COM-файла - C9h, имеется 256-байтовый заголовок;[2] поскольку C9h соответствует 8080 инструкция RET, это означает, что COM-файл будет немедленно завершен, если он будет запущен в более ранней версии CP / M, которая не поддерживает это расширение. (Поскольку наборы инструкций 8085 и Z80 являются надмножествами набора инструкций 8080, это работает на всех трех процессорах.) C9h является неверный код операции на 8088/8086, и это вызовет генерируемое процессором исключение прерывания 6 в режим v86 на 386 и более поздние чипы x86. Поскольку C9h - это код операции LEAVE, так как 80188 /80186 и поэтому не используется в качестве первой инструкции в действующей программе, исполняемый загрузчик в некоторых версиях DOS отклоняет COM-файлы, начинающиеся с C9h, во избежание сбоя.

Файлы могут иметь имена, оканчивающиеся на .COM, но не в простом формате, описанном выше; это обозначено магическое число в начале файла. Например, COMMAND.COM файл в DR DOS 6.0 на самом деле в Исполняемый файл DOS формат, обозначенный первыми двумя байтами MZ (4Dh 5Ah), инициалы Марк Збиковски.

Большие программы

Под ДОС здесь нет управление памятью предоставляется для COM-файлов грузчик или среда исполнения. Вся память просто доступна для COM-файла. После выполнения командная оболочка операционной системы, COMMAND.COM, перезагружается. Это оставляет возможность того, что файл COM может быть очень простым, используя один сегмент, или произвольно сложный, обеспечивающий собственную систему управления памятью. Примером сложной программы является COMMAND.COM, оболочка DOS, которая предоставляет загрузчик для загрузки других COM или EXE программы. В системе .COM могут быть загружены и запущены более крупные программы (вплоть до доступного размера памяти), но системный загрузчик предполагает, что весь код и данные находятся в первом сегменте, и программа .COM должна предоставить любой дальнейшая организация. Программы больше доступной памяти или большие сегменты данных, может обрабатываться динамическое связывание, если необходимый код включен в программу .COM. Преимущество использования формата .COM, а не .EXE заключается в том, что двоичный образ обычно меньше и его легче программировать с помощью ассемблер.[5] Один раз компиляторы и линкеры достаточной мощности, использование формата .COM для сложных программ стало невыгодным.

Поддержка платформы

Формат все еще исполняемый файл на многих современных Windows NT -основан платформы, но он запускается в MS-DOS -эмулирующая подсистема, НТВДМ, которого нет в 64-битный варианты. COM-файлы также могут выполняться на эмуляторах DOS, таких как DOSBox на любой платформе, поддерживаемой этими эмуляторами.

Используйте из соображений совместимости

Windows NT Операционные системы на основе .com используют расширение .com для небольшого количества команд, перенесенных из дней MS-DOS, хотя на самом деле они в настоящее время реализованы как .EXE файлы. Операционная система распознает заголовок файла .exe и правильно выполнит их, несмотря на их технически неправильное расширение .com. (Фактически, любой файл .exe можно переименовать в .com и по-прежнему правильно выполнять.) Использование исходных расширений .com для этих команд обеспечивает совместимость со старыми пакетными файлами DOS, которые могут ссылаться на них с их полными исходными именами файлов. Эти команды ДИСККОМП, ДИСККОПИЯ, ФОРМАТ, РЕЖИМ, БОЛЕЕ и ДЕРЕВО.

Предпочтение исполнения

В DOS, если каталог содержит как COM-файл, так и EXE файл с тем же именем, если расширение не указано, для выполнения предпочтительно выбирается COM-файл. Например, если каталог в системный путь содержит два файла с именем foo.com и foo.exe, следующее будет выполнять foo.com:

C: > foo

Пользователь, желающий запустить foo.exe может явно использовать полное имя файла:

C: > foo.exe

Воспользовавшись этим поведением по умолчанию, вирус писатели и другие вредоносные программисты использовали такие имена, как notepad.com для своих творений, надеясь, что если он будет помещен в тот же каталог, что и соответствующий EXE-файл, команда или пакетный файл может случайно запустить их программу вместо текстового редактора notepad.exe. Опять же, эти файлы .com на самом деле могут содержать исполняемый файл в формате .exe.

На Windows NT и производные (Windows 2000, Windows XP, Виндоус виста, и Windows 7 ), ПУТЬ переменная используется для переопределения порядка предпочтения (и допустимых расширений) для вызова файлов без указания расширения из командной строки. Значение по умолчанию по-прежнему помещает .com файлы до .EXE файлы. Это очень похоже на функцию, ранее обнаруженную в линейке процессоров расширенной командной строки JP Software. 4ДОС, 4OS2, и 4NT.

Вредоносное использование расширения .com

Некоторые авторы компьютерных вирусов надеялись воспользоваться тем, что современные пользователи компьютеров не знают .com расширение файла и связанный с ним двоичный формат, а также их более вероятное знакомство с .com Интернет-доменное имя. Электронные письма были отправлены с именами вложений, похожими на «www.example.com». Неосторожный Майкрософт Виндоус пользователи, нажимающие на такое вложение, ожидали бы начать просмотр сайта с именем http://www.example.com/, но вместо этого запустит прикрепленный двоичный командный файл с именем www.example, давая ему полное разрешение делать со своей машиной все, что задумал ее автор.

В самом формате COM-файла нет ничего зловредного; это использование случайного конфликта имен между доменами .com comфайлы mand и .com comкоммерческие веб-сайты.

Смотрите также

Рекомендации

  1. ^ Кристиан, Брайан; Марксон, Том; Скрента, Рич (ред.). «Раздел 5.3». Практическое руководство по PDP-11 (Редакция 1-е изд.). В архиве из оригинала на 2018-08-01. Получено 2018-08-01. (NB. Имеется ссылка на РТ-11 операционная система, работающая на PDP-11 minicomputer, который показывает в разделе 5.3, что .COM используется для ссылки на командный файл.)
  2. ^ а б Эллиотт, Джон С.; Лопушинский, Джим (2002) [1998-04-11]. "Заголовок файла CP / M 3 COM". Seasip.info. Архивировано из оригинал на 2018-08-01.
  3. ^ "Регистры запуска DOS .COM". fysnet.net.
  4. ^ Пол, Маттиас Р. (2002-10-07) [2000]. "Re: запустить COM-файл". Группа новостейalt.msdos.programmer. В архиве из оригинала от 03.09.2017. Получено 2017-09-03. [1]
  5. ^ Скэнлон, Лео Дж. (1991). "Глава 2". Подпрограммы языка ассемблера для MS-DOS (2-е изд.). Книги Уиндкреста. п. 16. ISBN  0-8306-7649-X.

внешняя ссылка