Эта статья требует дополнительных ссылок для проверки . ( февраль 2009 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Расширение имени файла | .COM |
---|---|
Тип интернет-СМИ | приложение / x-dosxec |
Тип формата | Исполняемый |
Расширен до | Исполняемый файл DOS MZ |
COM - файл представляет собой тип простого исполняемого файла . В операционных системах цифрового оборудования 1970-х годов он использовался как расширение имени файла для текстовых файлов, содержащих команды, которые должны быть отправлены операционной системе (аналогично пакетному файлу ). [1] С появлением CP / M ( операционной системы микрокомпьютера ) тип файлов, обычно связанных с расширением COM, изменился на исполняемые файлы. Позднее это соглашение было перенесено в DOS . Даже в сочетании с более общим форматом файлов EXE..COM
для исполняемых файлов компактные COM-файлы оставались жизнеспособными и часто использовались под DOS.
Расширение .COM
имени файла не имеет отношения к доменному имени верхнего уровня .com («коммерческий»). Однако создатели вредоносных программ использовали это сходство в названии .
Двоичный формат DOS [ править ]
Формат COM - это исходный двоичный исполняемый формат, используемый в CP / M (включая SCP и MSX-DOS ), а также в DOS . Это очень просто; он не имеет заголовка (за исключением файлов CP / M 3), [2] и не содержит стандартных метаданных , только код и данные. За эту простоту приходится платить : двоичный файл имеет максимальный размер 65 280 (FF00 h ) байтов (256 байтов меньше 64 КБ) и хранит весь свой код и данные в одном сегменте .
Поскольку в нем отсутствует информация о перемещении , он загружается операционной системой по заранее заданному адресу, по смещению 0100h сразу после PSP , где он выполняется (отсюда и ограничение размера исполняемого файла): точка входа фиксируется на 0100h. Это не было проблемой на 8-битных машинах, поскольку они могут адресовать максимум 64 КБ памяти, но 16-битные машины имеют гораздо большее адресное пространство, поэтому формат вышел из употребления.
В архитектуре ЦП Intel 8080 можно адресовать только 65 536 байт памяти (диапазон адресов от 0000h до FFFFh). В CP / M первые 256 байтов этой памяти, от 0000h до 00FFh, были зарезервированы для системного использования нулевой страницей , и любая пользовательская программа должна была быть загружена ровно в 0100h для выполнения. COM-файлы идеально подходят для этой модели. До появления MP / M и Concurrent CP / M не было возможности запускать более одной программы или команды одновременно: программа, загруженная в 01:00, выполнялась, и никакая другая.
Хотя формат файлов в DOS и CP / M одинаков, файлы .COM для этих двух операционных систем несовместимы; COM-файлы DOS содержат инструкции x86 и, возможно, системные вызовы DOS , в то время как COM-файлы CP / M содержат инструкции 8080 и системные вызовы CP / M (программы, ограниченные определенными машинами, могут также содержать дополнительные инструкции для 8085 или Z80 ).
Файлы .COM в DOS устанавливают все регистры сегмента x86 на одно и то же значение, а регистр SP (указатель стека) - на FFFCh или FFFEh, [3], таким образом, стек начинается с самого верха сегмента памяти и работает оттуда вниз. [4]
В исходном API DOS 1.x , который был производным от CP / M API, завершение программы файла .COM должно было выполняться путем вызова функции INT 20h (Завершить программу) или функции INT 21h 0, которая обслуживала с той же целью, и программист также должен был убедиться, что регистры сегмента кода и данных содержат одно и то же значение при завершении программы, чтобы избежать потенциального сбоя системы. Хотя это можно было использовать в любой версии DOS, Microsoft рекомендовала использовать INT 21h Function 4Ch для завершения программы, начиная с DOS 2.x и далее, что не требовало установки одного и того же значения для сегмента данных и кода.
Можно сделать файл .COM для работы в обеих операционных системах в виде толстого двоичного файла . На уровне инструкций нет настоящей совместимости; инструкции в точке входа выбираются одинаковыми по функциональности, но разными в обеих операционных системах, и заставляют выполнение программы переходить к разделу для используемой операционной системы. По сути, это две разные программы с одинаковыми функциями в одном файле, которым предшествует код, выбирающий ту, которая будет использоваться.
В CP / M 3, если первый байт COM-файла - C9h, имеется 256-байтовый заголовок; [2], поскольку C9h соответствует инструкции 8080RET
, это означает, что 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), инициалы Марка Збиковски .
Большие программы [ править ]
В DOS нет управления памятью для COM-файлов загрузчиком или средой выполнения. Вся память просто доступна для COM-файла. После выполнения командная оболочка операционной системы COMMAND.COM перезагружается. Это оставляет возможность того, что файл COM может быть либо очень простым, используя один сегмент , либо произвольно сложным, предоставляя свою собственную систему управления памятью. Примером сложной программы является COMMAND.COM, оболочка DOS, которая предоставляет загрузчик для загрузки других COM или EXE.программы. В системе .COM можно загружать и запускать более крупные программы (вплоть до доступного объема памяти), но системный загрузчик предполагает, что весь код и данные находятся в первом сегменте, и программа .COM должна предоставить любой дальнейшая организация. Программы, размер которых превышает доступную память, или большие сегменты данных могут обрабатываться с помощью динамической компоновки , если необходимый код включен в программу .COM. Преимущество использования формата .COM, а не .EXE заключается в том, что двоичный образ обычно меньше по размеру и его легче программировать с помощью ассемблера . [5] Когда стали доступны компиляторы и компоновщики с достаточной мощностью, использование формата .COM для сложных программ перестало быть выгодным.
Поддержка платформы [ править ]
Формат еще исполняемый на многой современной Windows NT -А платформа , но он запускается в MS-DOS -emulating подсистеме, NTVDM , который не присутствует в 64-разрядные вариант. COM-файлы также могут выполняться на эмуляторах DOS, таких как DOSBox , на любой платформе, поддерживаемой этими эмуляторами.
Используйте по соображениям совместимости [ править ]
Операционные системы на базе Windows NT используют расширение .com для небольшого числа команд, перенесенных со времен MS-DOS, хотя в настоящее время они реализованы как файлы .exe . Операционная система распознает заголовок файла .exe и правильно выполнит их, несмотря на их технически неправильное расширение .com. (Фактически, любой файл .exe может быть переименован в .com и по-прежнему выполняться правильно.) Использование исходных расширений .com для этих команд обеспечивает совместимость со старыми пакетными файлами DOS, которые могут ссылаться на них с их полными исходными именами файлов. Эти команды DISKCOMP
, DISKCOPY
, FORMAT
, MODE
, MORE
и TREE
.
Предпочтение выполнения [ править ]
В 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 используется для переопределения порядка предпочтения (и допустимых расширений) для вызова файлов без указания расширения из командной строки. Значение по умолчанию по-прежнему помещает файлы перед файлами. Это очень похоже на функцию, ранее обнаруженную в линейке процессоров расширенной командной строки JP Software 4DOS , 4OS2 и 4NT ..com
.exe
Вредоносное использование расширения .com [ править ]
Некоторые авторы компьютерных вирусов надеялись воспользоваться вероятным незнанием современных пользователей компьютеров о расширении файлов .com и связанном с ними двоичном формате, а также о том, что они, скорее всего, знакомы с доменным именем .com в Интернете. Электронные письма были отправлены с именами вложений, похожими на «www.example.com». Неосмотрительные пользователи Microsoft Windows, щелкнув такие вложения, ожидали бы начать просмотр указанного сайта , но вместо этого запустили бы прикрепленный бинарный командный файл с именем , предоставляя ему полное разрешение делать со своей машиной все, что задумал его автор.http://www.example.com/
www.example
В самом формате COM-файла нет ничего зловредного; это эксплуатация совпадающей имя столкновения между .com ком MAND файлов и .com ком мерческий веб - сайтов.
См. Также [ править ]
- DOS API
- CMD файл (CP / M)
- Сравнение форматов исполняемых файлов
- Жир двоичный
- Исполняемое сжатие
Ссылки [ править ]
- ^ Кристиан, Брайан; Марксон, Том; Скрента, Рич (ред.). «Раздел 5.3». Практическое руководство по PDP-11 (редакция 1-го издания). Архивировано 01 августа 2018 года . Проверено 1 августа 2018 .(NB. Имеется ссылка на операционную систему RT-11, работающую на миникомпьютере PDP-11 , которая показывает в разделе 5.3, что .COM используется для ссылки на командный файл.)
- ^ а б Эллиотт, Джон С .; Лопушинский, Джим (2002) [1998-04-11]. "Заголовок файла CP / M 3 COM" . Seasip.info . Архивировано из оригинала на 2018-08-01.
- ^ "Регистры запуска DOS .COM" . fysnet.net .
- ^ Пол, Маттиас Р. (2002-10-07) [2000]. «Re: запустить COM-файл» . Группа новостей : alt.msdos.programmer . Архивировано 3 сентября 2017 года . Проверено 3 сентября 2017 . [1]
- Перейти ↑ Scanlon, Leo J. (1991). "Глава 2". Подпрограммы языка ассемблера для MS-DOS (2-е изд.). Книги Уиндкреста. п. 16. ISBN 0-8306-7649-X.
Внешние ссылки [ править ]
- COM 101 - пошаговое руководство по исполняемому файлу DOS