Файл: О.А.Калашников. Ассемблер Это Просто. Учимся программировать.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Программирование

Добавлен: 16.02.2019

Просмотров: 29243

Скачиваний: 1689

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

Часть III. Файловая оболочка, вирус, резидент 

224 

 

Флаг  прерывания 

IF

  (Interrupt  Flag).  Содержит  1,  если  разрешена  обработка 

прерываний микропроцессором. 

 

Флаг  управления 

DF

  (Direction  Flag).  Управляет  направлением  передачи 

данных:  если  он  содержит  0,  то  после  каждой  индексной  операции 
содержимое индексных регистров увеличивается на 1, в противном случае — 
уменьшается на 1. 

 

Флаг  переполнения 

OF

  (Overflow  Flag).  Равен  1,  если  в  результате  операции 

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

3.  Я  только  начинаю  изучать  ассемблер,  но  у  меня  уже  возникла  необхо-

димость иметь документацию по всем прерываниям MS-DOS. Где можно ее 
найти? 
Документацию на русском языке можно скачать на сайте http://www.Kalashnikoff.ru
Программа называется helpassm.exe. 
 
Если у вас возникли вопросы по работе с ассемблером, вы можете свободно об-

ращаться  к  нашим  экспертам  портала  RFpro.ru,  которые  дадут  вам  исчерпываю-
щие ответы. Желаем вам успехов! 

 


background image

 

 

 

Глава 23 

 

Область PSP и DTA. Системные  
переменные (окружение DOS) 

 
Настоящая  глава  информативная  и  достаточно  интересная.  В  ней  мы  рассмот-

рим то, что не затрагивалось в предыдущих главах, а именно: 

 

что такое системные переменные (в MS-DOS назывались окружением DOS); 

 

как уменьшить размер резидента в памяти; 

 

как менять "на лету" параметры резидента; 

 

как получить переданные нашей программе параметры в командной строке; 

 

как фиксировать в файле нажимаемые пользователем клавиши (в том числе и ввод 
паролей в программах командной строки); 

 

и прочее, по мелочам. 
Прежде  чем  начнем  рассматривать  подробно  работу  резидента,  мы  хотели  бы 

обратить ваше внимание на то, как теперь задается имя файла, в котором хранятся 
нажатые  пользователем  клавиши  (в  дальнейшем  этот  файл  именуется  LOG-
файлом). 

В  одной  из  предыдущих глав мы также сохраняли действия программ (запуск, 

создание,  удаление  файла,  создание/удаление  каталога  и пр.)  в  LOG-файле,  имя 
которого указывалось в ассемблерном листинге. Впоследствии, после ассемблирова-
ния, мы не могли менять имя LOG-файла и его местоположение в каталоге (если, ко-
нечно,  не  менять  его  вручную  непосредственно  в  COM-файле,  используя  какой-
нибудь текстовый редактор типа Hacker's View). Теперь же наш резидент стал более 
гибким. Имя LOG-файла можно задавать при запуске программы, указав его в па-
раметрах командной строки. Например: 

RESID23.COM c:\assm\log_file.txt 

После загрузки резидент создаст файл C:\assm\log_file.txt, в который и будет за-

носить нажатые пользователем клавиши. 

В настоящей главе рассмотрим, как можно менять параметры резидента "на ле-

ту". Для начала зададим себе несколько вопросов. 

Допустим,  мы  загрузили  резидент,  указав  перед  его  запуском  имя  LOG-файла 

A:\super\file.log.  Имеется  ли  возможность изменить имя LOG-файла, не перезагру-
жая резидента, т. е. не удаляя его из памяти, а затем, не загружая его, опять с но-
вым  параметром  в  командной  строке?  Можно  ли  запускать  резидент  без  каких-
либо параметров вообще? И всегда ли нужно указывать параметры? 


background image

 

Часть III. Файловая оболочка, вирус, резидент 

226 

23.1. Структура командной строки 

Прежде всего разберемся, что собой представляют параметры командной стро-

ки. Мы уже вкратце рассматривали данную тему, а сейчас заполним пробелы. 

Параметры командной строки указываются при запуске файла и должны распо-

лагаться после имени запускаемого файла. Например: 

SYS.COM C: A: 

Здесь 

SYS.COM  C:  A:

 —  командная  строка,  а 

C:  A:

 —  параметры  командной 

строки,  которые  передаются  файлу  SYS.COM  после  загрузки.  В  данном  примере 
SYS.COM скопирует системные файлы с диска С: на диск А:. Как же нашей про-
грамме получить эти параметры? 

Как уже упоминалось, параметры командной строки, передаваемые файлу, рас-

полагаются в PSP по смещению 

80h

. PSP, в свою очередь, находится в том сегмен-

те, в который загрузился наш COM-файл. Проще говоря, первая инструкция COM-
файла начинается со смещения 

100h

 (

org 100h

), а по смещению 

80h

 находятся па-

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

Каким  образом  параметры  командной  строки  записываются  по  этому  адресу  

и кто или что это делает? 

Все эти действия выполняет операционная система, и программисту нет необхо-

димости делать что-либо дополнительно. 

Что именно находится по смещению 

80h

  и  какова  структура  размещения  пара-

метров? 

Первый байт, расположенный по смещению 

80h

, указывает на длину командной 

строки. Если файлу никаких параметров не было передано, то этот байт будет ра-
вен  нулю.  Второй байт, как правило, — пробел (

20h

). За ним идет собственно то, 

что  мы  указали  после  имени  запускаемого  файла.  Заканчиваются  параметры  
командной строки символом 

0Dh

 (код клавиши <Enter>). Для наглядности предста-

вим это в табл. 23.1. 

Таблица 23.1. Командная строка 

Смещение 

Значение 

80h 

Длина строки 

81h 

<

Пробел> (20h = 32) 

82h 

Параметры 

Символ 0Dh (13) 

 
Допустим, мы запускаем программу SYS.COM таким образом: 

SYS.COM C: D: 

Тогда по смещению 

80h

 будет находиться следующее (табл. 23.2).  


background image

Глава 23. Область PSP и DTA. Системные переменные (окружение DOS) 

227 

Таблица 23.2. Данные командной строки 

Смещение 

Значение 

80h 

06h 

81h 

<

Пробел> (20h = 32) 

82h 

43h 3Ah 20h 44h 3Ah 

87h 

Символ 0Dh (13) 

 

П

Р И МЕ Ч А Н И Е

 

43h 3Ah 20h 44h 3Ah 

— ASCII-символы "C:_D:" (символ "_" — пробел). 

Длина 6 байт устанавливается потому, что система считает пробел, расположен-

ный по адресу 

81h

, частью командной строки.  

Параметры командной строки можно наблюдать в отладчике. Для этого загрузи-

те программу под отладчиком следующим образом: 

afd resid23.com params 

где 

params

 — параметры командной строки (рис. 23.1). 

 

Рис. 23.1. Параметры командной строки в DTA после загрузки программы 

23.2. Системные переменные  
(окружение MS-DOS) 

Системные  переменные  содержат  параметры,  устанавливаемые  автоматически 

при  запуске  консоли  либо  вручную  с  помощью  внутренних  команд.  Пример  сис-
темных переменных: 

PATH C:\WINDOWS;C:\WINDOWS\COMMAND 
COMSPEC=C:\COMMAND.COM 


background image

 

Часть III. Файловая оболочка, вирус, резидент 

228 

TEMP=C:\TEMP 
PROMPT=$P$G 

... и прочие. 

Системные  переменные  передаются  каждой  программе,  которая  загружается. 

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

path

. Бо-

лее того, вирусы могут заражать файлы, используя значение этой переменной.  

Посмотреть  системные  переменные  можно  с  помощью  внутренней  команды 

SET

, набрав ее в командной строке. На рис. 23.2 показаны эти переменные под опе-

рационной системой Windows 2000. Изменения системных переменных с помощью 
команды 

SET

 действительны только для текущего сеанса консоли. 

Также  посмотреть  и  изменить  эти  переменные  можно  следующим  способом: 

правая кнопка мыши на значке Мой компьютер, далее Свойства | Дополнительно | 
Переменные  среды | Системные переменные
. Изменение переменных в данном 
окне сохраняется и действует при следующем сеансе работы в операционной системе. 

Эти  параметры  создает  DOS  автоматически  после  загрузки  программы  в  па-

мять, но до передачи ей управления и заносит в сегмент, адрес которого находит-
ся в PSP по смещению 

2Ch

, причем смещение всегда равно нулю. Пример чтения 

окружения рассмотрим далее. Сейчас разберем, чем оно может помешать нашему 
резиденту. 

 

Рис. 23.2. Параметры окружения DOS