К какому типу файлов относятся файлы с расширением exe сом

Обновлено: 04.07.2024

.EXE (сокр. англ. executable — исполнимый) — расширение исполняемых файлов, применяемое в операционных системах DOS, Windows, Symbian OS, OS/2 и в некоторых других, соответствующее ряду форматов. Кроме объектного кода может содержать различные метаданные (ресурсы, цифровая подпись [1] ).

Содержание

Файл EXE, создаваемый компоновщиком, состоит из двух частей:

  • управляющая информация для загрузчика;
  • загрузочный модуль.

Информация для загрузчика, описанная ниже, расположена в начале файла и образует так называемый заголовок. Сразу за ним следует тело загрузочного модуля, представляющее собой копию образа памяти задачи, построенной компоновщиком.

Стандартная часть заголовка имеет следующий формат [3] :

Далее следует таблица настройки адресов. Таблица состоит из элементов, число которых записано в байтах 06-07. Элемент таблицы настройки состоит из двух полей: 2-байтного смещения и 2-байтного сегмента, и указывает слова в загрузочном модуле, содержащее адрес, который должен быть настроен на место памяти, в которое загружается задача. Настройка производится следующим образом:

При обращении к нерезидентной команде или вызове программы операцией Exec, DOS определяет минимальный адрес, начиная с которого может быть загружена соответствующая программа. Эта область называется программным сегментом.

По смещению 0000 в программном сегменте DOS формирует префикс программного сегмента (PSP). Сама программа загружается по смещению 0100.

Программа завершается переходом по адресу 0000 в программном сегменте, выполнив INT 20, выполнив INT 21 с AH=0 или AH=4C, или обратившись к подпрограмме по адресу 0050 в программном сегмент с AH=0 или AH=4C.

Примечание: при завершении иначе, чем операцией 4C, программа должна предварительно заслать в CS адрес начала своего программного сегмента.

Когда загруженная программа получает управление, имеют место следующие условия:

Описание формата EXE

Исполняемый файл EXE является приложением Windows либо DOS систем. Такой тип файла может включать в себя самораспаковывающиеся архивы. Имеют невероятно широкое распространение.

Стоит отметить, что в операционных системах Windows, открыть файл .exe можно посредством двойного клика левой клавиши мыши. В прочих платформах Linux или Mac OS запустить рассматриваемое расширение возможно при помощи предварительно установленных на компьютер эмуляторов, к примеру VMware Workstation.

Формат .exe так же поддаётся редактированию, для этого необходимо воспользоваться утилитой на подобии Resource Hacker. Среди пользователей распространены случаи нарушения ассоциации файлов по типам, когда множество ярлыков в формате EXE могут иметь одинаковый внешний вид. При такой ситуации можно воспользоваться приложением Unassociate File Types, способным корректно восстановить ассоциации.

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

Информация в расширении необходима для формирования надлежащей среды Microsoft DOS и системах Виндоус. Если открыть exe файлы как самораспаковывающийся архив, можно отметить факт того, что установка хранимого контента будет произведена в предварительно заданную директорию.

Существует два основных типа загрузочных программ: EXE и COM. Рассмотрим требования к EXE-программам. DOS имеет четыре требования для инициализации ассемблерной EXE-программы: 1) указать ассемблеру, какие сегментные регистры должны соответствовать сегментам, 2) сохранить в стеке адрес, находящийся в регистре DS, когда программа начнет выполнение, 3) записать в стек нулевой адрес и 4) загрузить в регистр DS адрес сегмента данных.

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

2. Сегмент стека. В EXE-программе определяется сегмент стека, в то время как COM-программа генерирует стек автоматически. Таким образом при создании ассемблерной программы, которая будет преобразована в COM-файл, стек должен быть опущен.

3. Сегмент данных. В EXE программе обычно определяется сегмент данных, а регистр DS инициализируется адресом этого сегмента. В COM-программе все данные должны быть определены в сегменте кода.

4. Инициализация. EXE-программа записывает нулевое слово в стек и инициализирует регистр DS. Так как COM-программа не имеет ни стека, ни сегмента данных, то эти шаги отсутствуют. Когда COM-программа начинает работать, все сегментные регистры содержат адрес префикса программного сегмента (PSP),

Warning: No STACK Segment

(Предупреждение: Сегмент стека не определен)

ПРИМЕР ПРОГРАММЫ

Программа преобразования двузначного шестнадцатеричного числа в символьном виде в двоичное представление.

Выход: результат преобразования помещается в регистр dl.

data segment para public “data” ;сегмент данных

message db “Введите две 16-теричные цифры, $”

stk segment stack

db 256 dup (“?”) ;сегмент стека

code segment para public “code” ;начало сегмента кода

main proc ;начало процедуры main

mov ax,data ;адрес сегмента данных в регистр ах

mov ds,ax ;ax в ds

mov dx,offset message

xor ax,ax ;очистить регистр ах

mov ah,1h ;1h в регистр ah

int 21h ;генерация прерывания с номером 21h

mov dl,al ;содержимое регистра al в регистр dl

sub dl,30h ;вычитание: (dl)=(dl)-30h

cmp dl,9h ;сравнить (dl) с 9h

jle M1 ;перейти на метку М1, если dl sub dl,7h ;вычитание: (dl)=(dl)-7h

M1: ;определение метки М1

mov cl,4h ;пересылка 4h в регистр сl

shl dl,cl ;сдвиг содержимого dl на 4 разряда влево

int 21h ;вызов прерывания с номером 21h

sub al,30h ;вычитание: (dl)=(dl)-30h

cmp al,9h ;сравнить (al) c 9h

jle M2 ;перейти на метку М2, если al sub al,7h ;вычитание: (al)=(al)-7h

M2: ;определение метки М2

add dl,al ;сложение: (dl)=(dl)+(al)

mov ax,4c00h ;пересылка 4с00h в регистр ax

int 21h ;вызов прерывания с номером 21h

main endp ;конец процедуры main

code ends ;конец сегмента кода

end main ;конец программы с точкой входа main

Строки 4-6 описывают сегмент стека, который является просто областью памяти длиной 256 байт, инициализированной символами «”?”». Отличие сегмента стека от сегментов других типов состоит в использовании и адресации памяти. В отличие от сегмента данных (наличие которого необязательно, если программа не работает с данными), сегмент стека желательно определять всегда.

Строка 9 содержит директиву ассемблера, которая связывает сегментные регистры с именами сегментов.

Строки 10-11 выполняют инициализацию сегментного регистра DS.

Строка 15 подготавливает регистр АХ к работе, обнуляя его.

Строки 16-17 обращаются к средствам операционной системы для ввода символа с клавиатуры. Введенный символ операционная система помещает в регистр AL.

Строка 18 пересылает содержимое AL в регистр DL. Это делается для того, чтобы освободить AL для ввода второй цифры.

Строка 19 преобразует символьную цифру в ее двоичный эквивалент путем вычитания 30h, в результате чего в регистре DL будет двоичное значения числа.

В строках 20-21 выясняется, нужно ли корректировать двоичное значение DL. Если оно лежит в диапазоне 0…9, то в DL находится правильный двоичный эквивалент введенного символа шестнадцатеричной цифры. Если значение в DL больше 9, то введенная цифра является одним из символов A,B,C,D,E,F. В первом случае строка 21 передаст управление на метку М1.

В строках 24-25 значение в DL сдвигается на 4 разряда влево, освобождая место в младшей тетраде под младшую шестнадцатеричную цифру.

В строке 26 в регистр AL вводится вторая шестнадцатеричная цифра.

В строках 27-29 выясняется, попадает ли двоичный эквивалент второго символа шестнадцатеричной цифры в диапазон 0…9. Наша вторая цифра не попадает в диапазон, поэтому для получения правильного двоичного эквивалента нужно произвести дополнительную корректировку. Это делается в строке 38.

Строки 33-34 предназначены для завершения программы и возврата управления операционной системе.

СТРУКТУРЫ

Описание типа структуры

1. Задать шаблон структуры. По смыслу это означает определение нового типа данных, который впоследствии можно использовать для определения переменных этого типа.

2. Определить экземпляр структуры. Этот этап подразумевает инициализацию конкретной переменной с заранее определенной структурой.

3. Организовать обращение к элементам структуры.

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

Описание шаблона структуры.

Описание типа открывает директива STRUC, где указывается имя, которое дали типу структуры. Это же имя должно быть в директиве ENDS. Между этими двумя директивами может быть указано любое число директив, описывающих поля структуры.

Например, тип структуры DATE из трех полей Y (год), M(месяц), D(день) можно описать так:

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

После того как описан тип структуры, можно определять в программе переменные этого типа, отводить под них память. Такие переменные называются переменными-структурами или просто структурами. Описываются они с помощью директив следующего вида:

Пример описания переменных-структур:

Это директивы особого рода. До этого мы рассматривали директивы, названиями которых были служебные слова, а здесь названием является имя DATE. Каждая такая директива описывает одну переменную, имя которой указывается в начале директивы.

DT2 DATE эквивалентно DT2 DATE

DT3 DATE эквивалентно DT3 DATE

Одной директивой можно описать сразу несколько структур, т. е. можно описать массив, элементами которого являются структуры. Например по директиве

DTS DATE 10 dup (<>)

описывается массив из 11 структур типа DATE, причем поля первой из них будут иметь начальные значения: 2004, 12, 5, а остальные десять структур получают один и тот же набор начальных значений, взятых по умолчанию: 2004, 3, ?.

Описав тип структуры и переменные этого типа, получаем право работать с этими переменными-структурами. Как единое целое структуры обрабатываются редко, обычно они обрабатываются по полям. чтобы сослаться на поле структуры, надо использовать конструкцию вида

Такая конструкция обозначает ту ячейку памяти, которую занимает указанное поле указанной переменной. Встречая эту конструкцию, ассемблер заменяет ее на адрес данной ячейки.

Пример. Если в переменной DT1 хранится мартовская дата, то требуется записать сюда дату следующего дня года.

inc DT1.D ; следующий день в марте

APRL: mov DT1.M, 4 ; замена 31 марта 1 апреля

ОБЪЕДИНЕНИЯ

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

ПРОЦЕДУРЫ

Не нашли то, что искали? Воспользуйтесь поиском:

Отключите adBlock!
и обновите страницу (F5)
очень нужно


Навигация сайта

Структура COM и EXE файлов

Структура COM файла

В основном COM файлы пишут на языке Ассемблера, но это не обязательно. Нописать файл можно на любом языке, который можно потом компилировать.

.286 ; Устанавливаем тип процессора
mov ah,09h ;Функцию DOS (прерывание 21h) 09h
mov dx,offset message ; Заносим в dx значение переменной message
int 21h ;Устанавливаем прерывание которое должно обработать функцию 09h

mov ah,4Ch ;Функцию DOS (прерывание 21h) 4Ch
int 21h ;Устанавливаем прерывание которое должно обработать функцию 00h

message db "My first COM programms",13,10,"$" ;Придаем значение переменной message

Использую определение прерывания можно сказать как действует эта программа.

mov ah,09h
int 21h

В первой строке в регистр ah заносится значение 09, где h означает, что это число в шестнадцатеричной системе исчисления, во второй строке указывается прерывание, в данном случае это 21, (h тоже самое, что и в первой строке) т.е. прерывание DOS. Получив такую команду, процессор на время перестает выполнять текущие операции и передает управление находящейся в оперативной памяти программе, обработчику функции 09h. После выполнения всех этих операций процессор возвращается к выполнению ранее выполняемой операции.

Ниже приведены два варианта кода COM - файла до "инфицирования" вирусом и после:

.286 ;Задаем тип процессора
code segmen ; Начало сегмента кода программы
org 100h ;Все COM программы начинаются с адреса 100h

jmp coob ; Тело программы начинается с метки coob

mov ah,4Ch
int 21h

coob: ;Начало тела программы
mov ah,09h ; Заносим значение 09h в регистр ah
mov dx,offset message ; В регистре dx указываем адрес строки с текстом
int 21h ; Указываем, что это прерывание DOS 21h

message db "Файл не инфицирован",13,10,"$" ; Строка с текстом для вывода на экран

mov ah,4Ch ;Выходим из программы
int 21h ; Прерывание 21h

ends code ; Конец сегмента кода программы

.286 ;Задаем тип процессора
code segmen ; Начало сегмента кода программы
org 100h ;Все COM программы начинаются с адреса 100h

jmp virus ; JMP изменены таками образом, чтобы вирус получил управление

mov ah,4Ch
int 21h
coob:
mov ah,09h
mov dx,offset message
int 21h
message db "Файл не инфицирован",13,10,"$" ; Строка с текстом для вывода на экран
mov ah,4Ch
int 21h

virus:

mov .
. > Вирус размножается и выполняет свои разрушительные действия
. int 21h

jmp coob

ends code ; Конец сегмента кода программы

Ниже приведена структура инфицированного файла

Хвост COM программы

Тело вируса

Оригинальное начало
COM программы

Структура EXE файла

COM файлы пишут в основном на языке Ассемблера, но они постепенно устаревают и на смену им приходят огромные по своим размерам и сложные по своей структуре EXE файлы.
Состоять EXE файлы могут из нескольких сегментов, следовательно их размер не ограничен 64 кб. По структуре EXE файл сложнее, кроме кода программы в файле также содержется: заголовок файла, таблица настройки адресов, данные и т.п.

Примерная структура EXE файла:

Тело программы

Конец программы

Заголовок EXE файла - содержет данные необходимые для загрузки программы
Тело программы - основная часть программы, выполняющая какие-либо полезные действия
Конец программы - завершающая часть программы, которая сохраняет нужные и удаляет ненужные данные из ОЗУ, закрывает все открытые данной программой файлы и т.п.

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

Приводить виды "инфицированного" и "не инфицированного" EXE файла я не буду, т.к. в отличие от COM вирусов, у EXE вирусов есть множество способов заражения. Подробно о каждом из них я расскажу Вам в следующих выпусках рассылки, а сейчас только перечислю названия основных из них:

OVERWRITE - вирусы, замещающие программный код

COMPANION - вирусы-спутники

PARASITIC - вирусы, внедряющиеся в программу

метод переименования EXE файла

внедрение способом переноса

внедрение способом сдвига

Стандартный вирус

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

Интересно, а кто создал первый вирус ?

С момента появления вычислительной техники программистов и электронщиков интересовала одна тема: самовопроизводяющиеся и самораспространяющиеся механизмы. Первым кто попробовал осуществить эту идею в 1951 году был Дж. фон Нейман. Но Нейман и не думал использовать эти материалы в каких либо разрушительных целях, но другие люди, воспользовавшись его материалами и знаниями в этой области начали создавать различных вредоносные программы - компьютерные вирусы. Но что же побудило этих людей пойти на это. Ученые считают, что людей побуждают создавать компьютерные вирусы некоторые факторы:

- озорство и одновременное непонимание всех последствий распространения вируса
- стремление навредить кому-либо
- неестественная потребность в совершение преступлений
- желание самоутвердиться
- невозможночть использовать свои знания в правильном русле

Как и у биологических, у компьютерных вирусов есть определенные стадии "развития":

- латентный период - в течение которого вирус себя никак не проявляет (для того, чтобы "замести следы" источника его попадания на "инфицированный" ПК)
- инкубационный период - в рамках которого вирус только размножается
- период проявления - в течение которого вирус выполняет несанкционированные пользователем действия.
Компьютерные вирусы классифицируют по следующим признакам.
- способ обитания
- способ заражения и среды обитания
- способ активизации
- способ проявления
- способ маскировки

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

ФАЙЛОВЫЕ

Вирусы могут внедряться в следующие компоненты системы:

- файлы с компонентами DOS
- исполняемые файлы COM
- исполняемые файлы EXE
- внешние драйвера устройств (SYS- и BIN-файлы)
- объектные модули (OBJ-файлы)
- файлы программы до их компиляции, в надежде на то, что их когда нибуть компилируют и запустят
- командные файлы (BAT-файлы)
- файлы-библиотеки (LIB, DLL и др.файлы)
- оверлейные файлы (PIF, OV? и др. файлы)
- файлы текстовых процессоров поддерживающих макроcы (DOC, XLS и др.файлы)

С каждым днем этот список растет.

Чаще всего вирусы внедряются в файлы COM, EXE и DOC

ЗАГРУЗОЧНЫЕ

загрузояные вирусы распространяются в BOOT секторах дисков и дискет

- BR - на дискетах
- MBR - на жестком диске

При загрузке этих дискет выполняется программа в BOOT секторе этого диска, а следовательно и сам вирус. Плюс этого типа вирусов в том, что если прочитать этот инфицированный диск, то на нем не окажется ни одного файла.

ФАЙЛОВО-ЗАГРУЗОЧНЫЕ ВИРУСЫ

Вирусы данного типа обладают большей инфицирующей способностью, так как они распространяются в BOOT секторах диска и в файлах на этом диске.

СПОСОБЫ ЗАРАЖЕНИЯ СРЕДЫ ОБИТАНИЯ

Вирусы могут "имплантироваться" в следующие места файлов:

- конец файла
- начало файла
- середина файлов
- хвостовой части файлов (свободной)

Читайте также: