Jump to content

COM-файл

С
Расширение имени файла
Тип интернет-СМИ приложение/x-dosexec
Тип формата Исполняемый файл
Распространено на Исполняемый файл DOS MZ
Несколько COM-файлов в IBM PC DOS 1.0.

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

The .COM Расширение имени файла не имеет никакого отношения к .com имени интернет-домена верхнего уровня (для «коммерческого»). Однако это сходство в названии было использовано авторами вредоносных программ .

Бинарный формат DOS [ править ]

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

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

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

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

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

В исходном API DOS 1.x , который был производным от API CP/M, программное завершение файла .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. режим на чипах x86 386 и более поздних версиях. Поскольку C9h является кодом операции для LEAVE начиная с 80188/80186 следовательно , и , не используется в качестве первой инструкции в допустимой программе, исполняемый загрузчик в некоторых версиях DOS отклоняет COM-файлы, начинающиеся с C9h, избегая сбоя.

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

Большие программы [ править ]

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

Поддержка платформы [ править ]

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

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

Операционные системы на базе Windows NT используют расширение .com для небольшого количества команд, перенесенных со времен MS-DOS, хотя на самом деле в настоящее время они реализованы в виде .exe файлов . Операционная система распознает заголовок файла .exe и правильно выполнит его, несмотря на его технически неправильное расширение .com. (Фактически любой файл .exe можно переименовать в .com и при этом выполняться корректно.) Использование исходных расширений .com для этих команд обеспечивает совместимость со старыми пакетными файлами DOS, которые могут ссылаться на них с их полными исходными именами. Эти команды CHCP, DISKCOMP, DISKCOPY, FORMAT, MODE, MORE и TREE. [6]

Предпочтение исполнения [ править ]

В 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 Vista и Windows 7 ) Переменная PATHEXT используется для переопределения порядка предпочтений (и допустимых расширений) для вызова файлов без указания расширения в командной строке. Значение по умолчанию все еще остается .com файлы раньше .exe файлы. Это очень похоже на функцию, ранее встречавшуюся в линейке процессоров расширенной командной строки JP Software 4DOS , 4OS2 и 4NT .

Злонамеренное использование расширения .com [ править ]

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

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

См. также [ править ]

Примечания [ править ]

  1. Перейти обратно: Перейти обратно: а б В большинстве версий CP/M начало TPA было по смещению +100h, которому в памяти предшествовала только нулевая страница по смещению +0h. Некоторые версии различались по аппаратным причинам, включая CP/M для Heath H89 , где он начинался со смещением +4300h (для совместимости существовала аппаратная модификация Magnolia Microsystems, позволяющая отображать ПЗУ через +100h после запуска), или CP/M для TRS-80 Model I и TRS-80 Model III , где программы загружались со смещением +0h.

Ссылки [ править ]

  1. ^ Кристиан, Брайан; Марксон, Том; Скрента, Рич (ред.). «Раздел 5.3». Руководство по PDP-11 (первая редакция). Архивировано из оригинала 01 августа 2018 г. Проверено 01 августа 2018 г. (Примечание. Содержит ссылку на операционную систему RT-11 , работающую на миникомпьютере PDP-11 , где в разделе 5.3 показано, что .COM используется для ссылки на командный файл.)
  2. Перейти обратно: Перейти обратно: а б Эллиотт, Джон К.; Лопушинский, Джим (2002) [11 апреля 1998]. «Заголовок COM-файла CP/M 3» . Seasip.info . Архивировано из оригинала 01 августа 2018 г.
  3. ^ Пол, Матиас Р. (07.10.2002) [2000]. «Re: Запуск COM-файла» . Группа новостей : alt.msdos.programmer . Архивировано из оригинала 3 сентября 2017 г. Проверено 3 сентября 2017 г. [1] (Примечание. Содержит подробную информацию о соглашениях о вызовах программ DOS COM.)
  4. ^ Лант, Бенджамин «Бен» Д. (2020). «Регистры запуска DOS .COM» . Вечно молодое программное обеспечение . Архивировано из оригинала 12 ноября 2020 г. Проверено 14 декабря 2021 г.
  5. ^ Скэнлон, Лео Дж. (1991). «Глава 2». Подпрограммы языка ассемблера для MS-DOS (2-е изд.). Книги Виндкреста. п. 16. ISBN  0-8306-7649-Х .
  6. ^ «Команды Windows» . Майкрософт. 26 апреля 2023 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 1f713631945744c9146d7991f007970c__1704574560
URL1:https://arc.ask3.ru/arc/aa/1f/0c/1f713631945744c9146d7991f007970c.html
Заголовок, (Title) документа по адресу, URL1:
COM file - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)