|
Пример по-
следовательности программных кодов, предназначенный для выполне-
ния этих действий для программного файла типа .COM, показан в
листинге 3-9.
Для программных файлов типа .EXE можно восстановить надлежа-
щие значения сегмента из значений, установленных компоновщиком
LINK (например, mov ss,stack), или из памяти, размещаемой внутри
программного сегмента. Для защиты стека необходимо помнить о том,
что последовательность восстановления стекового сегмента и указа-
теля стека должна быть такой, что сначала указывается указатель
стека, а затем стековый сегмент.
Начиная с версии MS-DOS 3.0, этот недостаток устранен. |
asplinux 11 |
|
{img2} |
avast 4 professional |
|
Функ-
ция загрузки и выполнения программы возвращает все регистры "нет-
ронутыми".
Листинг 3-9. Восстановление необходимых элементов при выполнении
функции загрузки и выполнения программы для прог-
раммного файла типа .COM в MS-DOS версии 2.XX
-----------------------------------------------------------------
...
<установка параметров вызывающей программой>
...
mov spoint,sp ; сохранение указателя стека в памяти
mov ax,4B00h ; функция загрузки и выполнения пр-мы
int 21h ; вызов MS-DOS
; регистры не изменятся, если произойдет сбой при загрузке --
; восстановление не выполнять
jc error ; переход при ошибке
mov ax,cs ; получение общего сегмента
mov ds,cx ; для сегмента данных
mov es,cx ; для внешнего сегмента
mov ss,ax ; и для стекового сегмента
mov sp,spoint ; стек теперь повторно выровнен
...
<восстановление общих регистров>
...
----------------------------------------------------------------
Загрузка программного оверлея (перекрытия) посредством MS-DOS
(код функции 4Bh с AL = 3)
Возможность выполнения одной программы из другой является на
самом деле огромным достижением, но при этом имеет место сущест-
венный недостаток, заключающийся в том, что после выполнения вы-
зываемой программы происходит ее завершение. |
антивирус касперского |
|
|
Однако, во многих
случаях разработчики программ хотят вызывать другую программу для
выполнения некоторых функций, но при этом дополнительно хотят
иметь большую степень управления порожденной программой, или
большую степень связи с порожденной программой, или даже возмож-
ность неоднократного вызова порождаемой программы без ее повтор-
ной перезагрузки. Для этих случаев для функции 4Bh MS-DOS предос-
тавляет опцию Load Overlay (загрузка оверлея).
- 3-52 -
Одним из отличий функции загрузки оверлея от функции загрузки
и выполнения программы является то, что при загрузке оверлейной
программы порождающая программа не предназначена для модификации
параметров порождаемой программы. |
asplinux deluxe |
|
|
avast antivirus, win архиваторы, архиватор rar, антивирус panda, Навигационные системы, .
asplinux confpoint
|
Указатель используется в качестве адреса сегмента с нулевым
смещением, указывающим на начало блока. Если этот адрес передает-
ся в регистре внешнего сегмента или в регистре данных, то прог-
рамма может выполнить поиск строки для нахождения требуемых пара-
метров. При этом будьте осторожны, потому что можно потерять
адрес PSP.
Информация, содержащаяся в PSP, действительна как для файлов
типа .COM, так и для файлов типа .EXE, и любой тип файла может
быть использован с функцией загрузки и выполнения программы.
Выполнение команд MS-DOS с функцией 4Bh
Одним из приложений функции загрузки и выполнения является
загрузка файла COMMAND.COM. Если принять во внимание, что файл
COMMAND.COM может выдавать команды через командную строку тексто-
вого буфера, то можно увидеть, что из программы пользователя мож-
но вызывать встроенные команды MS-DOS. Кроме того, командная
строка, передаваемая файлом COMMAND.COM, может содержать переназ-
начения, каналы и фильтры. Формат текста команды, используемый
при этом способе, почти такой же, какой используется в начальной
командной строке, за исключением того, что при вызове файла
COMMAND.COM из программы, текст команды должен начинаться с сим-
волов /c.
Загрузка двух программных файлов (COMMAND.COM и прикладной
программы) для выполнения только одного программного файла не яв-
ляется высокоэффективным способом выполнения программ. Однако,
следует принять во внимание большую гибкость и производитель-
ность, достигаемые при использовании этого способа.
Важное предупреждение
Механизм функции загрузки и выполнения программ в версии 2.0
MS-DOS имеет серьезный технический недостаток. При выполнении
функции "захламляются" все регистры сегментов (за исключением ко-
дового сегмента), разрушается указатель стека и разрушается боль-
- 3-51 -
шинство общих регистров. Если эта функция используется с любой
подверсией MS-DOS версии 2.0 (т.е. 2.00 или 2.10), то перед вызо-
вом функции необходимо сохранять в памяти указатель стека и любые
общие регистры, необходимые для дальнейшего использования; и
восстанавливать из памяти регистры сегментов, указатель стека и
необходимые общие регистры после выполнения функции.
|
|
|