Этот раздел описывает совокупность функций exec, для выполнения файла как образа процесса. Эти функции можно использовать, чтобы заставить дочерний процесс выполнить новую программу после того, как он был создан.
Функции отличаются определением аргументов, но они выполняют одну и ту же операцию. Все функции объявлены в заглавном файле «unistd.h».
int execv (const char *filename, char *const argv[]) (функция)
Функция execv выполняет файл, название которого находится в filename, как новый образ процесса.
Аргумент argv – массив строк с нулевым символом в конце, которые используются как параметры запускаемой программы. Последний элемент этого массива должен быть пустым указателем. Обычно, первый элемент этого массива — имя файла программы.
Среда для нового образа процесса создается из переменных среды текущего образа процесса.
int execl (const char *filename, const char *arg0. )
Подобна execv, но строки argv определены индивидуально, а не как массив. Пустой указатель должен быть передан как последний такой аргумент.
🚩 Запуск программы невозможен так как на компьютере отсутствует OpenAl32.dll
int execve (const char *filename, char *const argv[], char *const env[])
Подобна execv, но разрешает Вам определять среду для новой программы явно как аргумент env.
int execle (const char *filename, const char *arg0, char *const env[]. )
Подобна execl, но разрешает определять среду для новой программы явно. Аргумент среды передается после пустого указателя, который отмечает последний аргумент argv, и должен быть массивом строк.
int execvp (const char *filename, char *const argv[])
Execvp функция подобна execv, за исключением того, что она ищет исполняемый файл в каталогах, перечисленных в переменной среды PATH, если filename не содержит правый слэш.
Эта функция полезна для утилит системы. Программные оболочки используют ее, чтобы выполнить команды написанные пользователем.
int execlp (const char *filename, const char *arg0. )
Эта функция — подобна execl, за исключением того, что она выполняет тот же поиск имени файла как и execvp.
Размер списка параметров и списка среды, вместе не должен быть больше чем ARG_MAX байт. В системе GNU, размер (который сравнивается c ARG_MAX) включает, для каждой строки, число символов в строке, плюс размер char*, плюс один, округленный вверх после умножения на размер char*. Другие системы могут иметь несколько отличные правила для подсчета.
Эти функции обычно не возвращают управление в вызывающий процесс, так как выполнение новой программы заставляет завершиться программу выполнения немедленно. Значение -1 возвращается в случае ошибки. В дополнение к обычным синтаксическим ошибкам имени файла, определены следующие коды ошибки errno для этих функций:
объединенный размер списка параметров новой программы и списка среды больше чем ARG_MAX байт.
Система GNU не имеет никакого специфического ограничения размера списка параметров, так что этот код ошибки никогда не возвращается, но возможно, что будет возвращен код ENOMEM если аргументы слишком велики для доступной памяти.
Как исправить «Этому файлу не сопоставлена программа для выполнения»
заданный файл не может быть выполнен из-за его неверного формата
выполнение заданного файла требует большего количества памяти, чем доступно.
Если выполнение нового файла прошло успешно, то модифицируется поле времени доступа к файлу, как будто файл был прочитан.
Выполнение нового образа процесса не изменяет полностью содержимое памяти, копируются только аргументы и строки среды. Но множество других атрибутов процесса не изменяются:
· ID процесса и ID родительского процесса
· групповая принадлежность сеанса и процесса
· реальный пользовательский ID, ID группы, и дополнительный ID группы
· текущий рабочий каталог и корневой каталог
· маска режима создаваемого файла
· маска сигналов процесса
· время выполнения процесса.
Сигналы, которые игнорируются в существующем образе процесса, также будут установлены, чтобы игнорироваться в новом образе процесса. Все другие сигналы будут установлены по умолчанию в новом образе процесса.
Дескрипторы файлов, открытые в существующем образе процесса, остаются открытыми в новом образе процесса, если для них не установлен флаг FD_CLOEXEC. Файлы, которые остаются открытыми, наследуют все атрибуты описания открытого файла из существующего образа процесса, включая блокировки файла.
Новый образ процесса не имеет никаких потоков за исключением тех, что он создает заново.
Каждый из потоков в предыдущем образе процесса имеет описатель, и эти описатели остаются после exec (если они не имеют FD_CLOEXEC). Новый образ процесса может повторно соединять их с новыми потоками, используя fdopen.
Источник: studopedia.su
Презентация на тему EXE и COM файлы. Выполнение программ и распределение памяти
EXE файлы Создаются редактором связей LINK из obj – файлов и состоят из двух частей: Префикс (заголовок); Выполнимый модуль. Префикс состоит из управляющей информации и таблицы перемещаемых символов. Во время выполнения программы адресные константы должны иметь абсолютные адреса. Преобразование относительных адресов
- Главная
- Информатика
- EXE и COM файлы. Выполнение программ и распределение памяти
Слайды и текст этой презентации
Слайд 1 EXE и COM файлы. Выполнение программ и распределение
памяти
После трансляции и редактирования программы сохраняются на диске как
выполнимые файлы. Одна из основных задач ОС – организовать их
выполнение.
Все программы рассматриваются как внешние команды ОС. Командная строка для выполнения программы имеет формат:
[устройство] [путь] имя [параметры командной строки]
Устройство и путь указывают место расположения программного файла, если они пропущены, то поиск осуществляется по имени файла в текущем каталоге. Программные файлы бывают двух типов: с расширением EXE и COM. Они различаются как по структуре, так и по способу их загрузки и выполнения. Фалы с расширением ВАТ также рассматриваются как внешние команды ОС.
При загрузке программы в ОП резидентный загрузчик командного процессора (COMMAND.COM) использует системную функцию 4Bh (EXEC). Принято называть в этом случае программу процессом. Для загружаемых программ COMMAND.COM является родительским процессом. Он поддерживает область памяти, называемую окружением. Окружение состоит из ASCII цепочек следующего формата:
Имя переменной = переменная Например: SET ABC = XYZ12
Каждая цепочка завершается байтом 00h, последняя цепочка окружения – двумя такими байтами. Команда SET управляет окружением, позволяя добавлять или устранять переменные или изменять их. При активизации COMMAND в окружение записывается переменная COMSPEC, значение которой – полная файловая спецификация командного процессора, например: COMSPEC = С: COMMAND.СОМ.
Последние команды РАТН и PROMPT также включены в окружение. При загрузке программы на выполнение она получает копию окружения родительского процесса. Адрес окружения записывается в одном из полей PSP -префикса сегмента программы ( смещение 2Ch от начала PSP ). Окружение каждого процесса, активированного COMMAND.СОМ статично и в процессе выполнения не изменяется.
Слайд 2 EXE файлы
Создаются редактором связей LINK из obj –
файлов и состоят из двух частей:
Префикс (заголовок);
Выполнимый модуль.
Префикс состоит
из управляющей информации и таблицы перемещаемых символов. Во время выполнения
программы адресные константы должны иметь абсолютные адреса. Преобразование относительных адресов в абсолютные выполняется системным загрузчиком, который использует информацию из таблицы перемещаемых символов в которой описано местоположение адресных констант в выполнимом модуле. Управляющая информация в префиксе состоит из полей длиной слово и содержит следующую информацию:
Слайд 3 Загрузка программы (EXE – файла )
Управляющая информация из
префикса (заголовка) считывается в рабочую область ОС.
Определяется размер выполнимого
модуля в зависимости от полей 2, 3, 5, 6.
Находится первый
свободный блок памяти, размер которого достаточен.
Строится PSP – префикс сегмента программы. Сегмент после PSP называется стартовым сегментом. Выполнимый модуль загружается с начала этого сегмента.
Обрабатывается таблица перемещаемых символов с целью настройки адресных констант в соответствии с адресом загрузки (стартовым сегментом).
Регистрам DS, ES, FS, GS присваивается сегментный адрес PSP, SS и SP присваиваются соответствующие значения из полей 8 и 9 префикса и к SS добавляется адрес стартового сегмента. CS присваивается сумма поля 12 префикса и адреса стартового сегмента. IP загружается из поля 11 префикса EXE файла.
На этом этапе выполнимый модуль настроен в соответствии с адресом загрузки и управление передаётся по адресу CS:IP.
Слайд 4 Префикс сегмента программы PSP
PSP является важнейшим информационным блоком
для каждого активного процесса. Когда программа загружается на выполнение,
ей выделяется вся необходимая память от самого младшего свободного байта.
Эта область называется сегментом программы. Первые 256 байт отводятся под PSP, куда ОС помещает разнородную информацию (системную и для программы). Сама программа загружается непосредственно после PSP. Основные поля PSP:
Слайд 5 СОМ — файлы
Не имеют префикса (заголовка). Они строятся
так, чтобы не содержать адресных констант, зависимых от адреса
загрузки программы в память. СОМ – файлы состоят из одного
сегмента, в котором определены коды, данные и стек. Их размер не превышает 64Кб. СОМ файл представляет собой точную копию программы в двоичном виде, в каком её нужно загрузить в память. Поэтому загрузка сводится к определению свободного блока памяти, построению PSP и размещение всего файла в область после PSP. В MASM при построении СОМ файлов используется модель памяти TINY. При загрузке регистры получают следующие значения:
CS, DS, SS, ES, FS, GS – адрес PSP;
IP = 100h, SP = FFFEh
Примечание. При загрузке СОМ и ЕХЕ файлов программе выделяется ещё один блок памяти в который помещается копия текущего окружения COMMAND.
Слайд 6 Обобщенная структура com. файла
prog1 segment
para ‘code’
assume cs: prog1, ds: prog1, ss: prog1,
es: prog1
org 100h
start: jmp M1
A dw ?
B db ‘Пример com.’
old_N dd ?
…
M1: mov al, ES: [80h]
…
…
int 20h ; mov ax, 4c00h int 21h
Stack1 dw 100 dup(?)
prog1 ends
end start
Источник: mypreza.com
EXE и COM файлы. Выполнение программ и распределение памяти
1. EXE и COM файлы. Выполнение программ и распределение памяти
После трансляции и редактирования программы сохраняются на диске как выполнимые
файлы. Одна из основных задач ОС – организовать их выполнение.
Все программы рассматриваются как внешние команды ОС. Командная строка для
выполнения программы имеет формат:
[устройство] [путь] имя [параметры командной строки]
Устройство и путь указывают место расположения программного файла, если они
пропущены, то поиск осуществляется по имени файла в текущем каталоге. Программные
файлы бывают двух типов: с расширением EXE и COM. Они различаются как по структуре, так и
по способу их загрузки и выполнения. Фалы с расширением ВАТ также рассматриваются как
внешние команды ОС.
При загрузке программы в ОП резидентный загрузчик командного процессора
(COMMAND.COM) использует системную функцию 4Bh (EXEC). Принято называть в этом
случае программу процессом. Для загружаемых программ COMMAND.COM является
родительским процессом. Он поддерживает область памяти, называемую окружением.
Окружение состоит из ASCII цепочек следующего формата:
Имя переменной = переменная
Например: SET ABC = XYZ12
Каждая цепочка завершается байтом 00h, последняя цепочка окружения – двумя такими
байтами. Команда SET управляет окружением, позволяя добавлять или устранять переменные
или изменять их. При активизации COMMAND в окружение записывается переменная
COMSPEC, значение которой – полная файловая спецификация командного процессора,
например: COMSPEC = С: COMMAND.СОМ. Последние команды РАТН и PROMPT также
включены в окружение. При загрузке программы на выполнение она получает копию
окружения родительского процесса. Адрес окружения записывается в одном из полей PSP префикса сегмента программы ( смещение 2Ch от начала PSP ). Окружение каждого процесса,
активированного COMMAND.СОМ статично и в процессе выполнения не изменяется.
2. EXE файлы
Создаются редактором связей LINK из obj – файлов и состоят из двух частей:
— Префикс (заголовок);
— Выполнимый модуль.
Префикс состоит из управляющей информации и таблицы перемещаемых символов. Во
время выполнения программы адресные константы должны иметь абсолютные адреса.
Преобразование относительных адресов в абсолютные выполняется системным загрузчиком,
который использует информацию из таблицы перемещаемых символов в которой описано
местоположение адресных констант в выполнимом модуле. Управляющая информация в
префиксе состоит из полей длиной слово и содержит следующую информацию:
Поле
Смещение
Содержание
1
00h
4D5Ah – идентификатор EXE – файла
2
02h
Длина файла по модулю 512 (остаток от деления длины на 512 )
3
04h
Длина файла в блоках по 512 байт
4
06h
Количество элементов в таблице перемещаемых символов
…
….
….
8
0Eh
Смещение SS в выполнимом модуле ( в параграфах )
9
10h
Значение SP при получении управления выполнимым модулем
…
11
14h
Значение IP при получении управления выполнимым модулем
12
16h
Смещение CS и выполнимом модуле ( в параграфах )
13
18h
Начало таблицы перемещаемых символов ( смещение от начала файла в байтах )
3. Загрузка программы (EXE – файла )
1. Управляющая информация из префикса (заголовка) считывается в рабочую область ОС.
2. Определяется размер выполнимого модуля в зависимости от полей 2, 3, 5, 6.
3. Находится первый свободный блок памяти, размер которого достаточен.
4. Строится PSP – префикс сегмента программы. Сегмент после PSP называется стартовым
сегментом. Выполнимый модуль загружается с начала этого сегмента.
5. Обрабатывается таблица перемещаемых символов с целью настройки адресных констант в
соответствии с адресом загрузки (стартовым сегментом).
6. Регистрам DS, ES, FS, GS присваивается сегментный адрес PSP, SS и SP присваиваются
соответствующие значения из полей 8 и 9 префикса и к SS добавляется адрес стартового
сегмента. CS присваивается сумма поля 12 префикса и адреса стартового сегмента. IP
загружается из поля 11 префикса EXE файла.
7. На этом этапе выполнимый модуль настроен в соответствии с адресом загрузки и
управление передаётся по адресу CS:IP.
4. Префикс сегмента программы PSP
PSP является важнейшим информационным блоком для каждого активного процесса. Когда программа
загружается на выполнение, ей выделяется вся необходимая память от самого младшего свободного байта.
Эта область называется сегментом программы. Первые 256 байт отводятся под PSP, куда ОС помещает
разнородную информацию (системную и для программы). Сама программа загружается непосредственно
после PSP. Основные поля PSP:
Поле
Смеще
ние
(16)
Длина
1
0
2
Инструкция INT 20h ( завершение программы )
2
2
2
Размер памяти в блоках по 16 байт ( в параграфах )
…
…
…
…..
9
2С
2
Адрес области окружения (сегментный, смещение 0 )
13
55
7
Префикс первого FCB
14
5C
9
Первый FCB
17
80
1
Длина параметров командной строки
18
81
127
Содержимое
…
…
Параметры командной строки
5. СОМ — файлы
Не имеют префикса (заголовка). Они строятся так, чтобы не содержать адресных констант,
зависимых от адреса загрузки программы в память. СОМ – файлы состоят из одного сегмента,
в котором определены коды, данные и стек. Их размер не превышает 64Кб. СОМ файл
представляет собой точную копию программы в двоичном виде, в каком её нужно загрузить в
память. Поэтому загрузка сводится к определению свободного блока памяти, построению PSP и
размещение всего файла в область после PSP. В MASM при построении СОМ файлов
используется модель памяти TINY. При загрузке регистры получают следующие значения:
CS, DS, SS, ES, FS, GS – адрес PSP;
IP = 100h, SP = FFFEh
Примечание. При загрузке СОМ и ЕХЕ файлов программе выделяется ещё один блок
памяти в который помещается копия текущего окружения COMMAND.
6. Обобщенная структура com. файла
prog1
segment para ‘code’
assume cs: prog1, ds: prog1, ss: prog1, es: prog1
org 100h
start:
jmp M1
A
dw ?
B db ‘Пример com.’
old_N dd ?
…
M1: mov al, ES: [80h]
…
…
int 20h
; mov ax, 4c00h
int 21h
Stack1
dw 100 dup(?)
prog1 ends
end start
Источник: ppt-online.org