Руководство по Soft-ICE (DOS) - 4
|
- Виндовс это не вирус. Вирусы не глючат.
|
Окно Soft-ICE только что исчезло.
Чтобы вернуться в окно Soft-ICE, отпустите клавишу ALT,
а потом нажмите: ALT D
Окно восстановилось.
Для просмотра предыдущих команд, нажмите: клавишу стрелка вверх несколько раз.
Имейте в виду, что Soft-ICE помнит команды, которые были введены. Попробуйте
отредактировать одну просто для забавы. Вот некоторые клавиши редактирования:
INS -- переключает режим вставки
DEL -- Удаляет один символ
HOME -- Перемещает курсор в начало строки
END -- Перемещает курсор в конец строки
стрелка вправо -- Перемещает курсор на символ вправо
стрелка влево -- Перемещает курсор на символ влево
Имейте в виду, что когда включен режим вставки, курсор принимает форму блока.
Теперь, когда вы немного знакомы с окружением, давайте, попробуем некоторые
другие команды.
Сотрите команду, которую вы редактировали, нажав
клавишу HOME, потом нажимая клавишу DEL пока
команда не исчезнет.
Введите:
Команда WR делает видимым окно регистров. Окно регистров
показывает содержимое регистров 8086. Заметьте что значения регистров
отражают местоположение, где выполнялся код, когда вы вызвали
Soft-ICE.
Команда WR назначена в файле инициализации Soft-ICE, S-ICE.DAT
на функциональную клавишу F2.
Нажмите клавишу F2 несколько раз, и вы увидите, как
включается/выключается окно регистров. Оставьте окно
регистров видимым.
Увеличьте вертикальный размер окна Soft-ICE, держа
нажатыми ALT и , пока окно не займет весь экран.
Запомните значения регистров CS и IP в окне
регистров, потом введите:
Команда MAP покажет карту памяти системы. Область текущего указателя
инструкций (CS:IP) будет подсвечена. Если у вас сложная карта памяти,
вам может быть придется несколько раз нажать клавишу, пока вновь не появится
командная строка.
Теперь попробуйте следующую последовательность несколько раз, запоминая
регистры (CS:IP) в окне регистров.
Отпустите ALT и D
Каждый раз при возвращении в окно Soft-ICE, вы будет замечать что
регистры CS и IP изменились. Когда CS и IP изменились, вы может ввести
команду MAP снова и посмотреть, показывает ли теперь указатель инструкций
на другую область.
Это небольшое упражнение демонстрирует, что Soft-ICE является отладчиком
системного уровня, который всплывает по горячей комбинации клавиш Soft-ICE,
куда бы ни показывал указатель инструкций. Указатель инструкций непрерывно
меняется, потому что выполняется множество команд между вызовами, даже когда
вы - в командной строке DOS, типа прерываний таймера, работы драйверов
устройств DOS, занятости DOS при ожидании других прерываний и т.д.
Нажмите функциональную клавишу F12.
Функциональной клавише F12 по умолчанию назначена команда VER.
Она выводит сообщение об авторских правах на Soft-ICE и номер версии.
Теперь мы назначим функциональной клавише F12 команду RS.
Введите:
Она временно покажет экран программы без окна Soft-ICE.
Нажмите "пробел", чтобы вернуться в окно Soft-ICE.
Введите:
Это назначает команду RS на клавишу F12. Точка с запятой заменяет
клавишу ВВОД.
Нажмите клавишу F12.
Повторите это несколько раз для переключения между окном Soft-ICE и
экраном программы. Теперь удостоверьтесь, что выведено окно Soft-ICE,
при необходимости, нажав клавишу F12. Вы заметите, что RS выведен в окне
несколько раз. Одно появление на экране команды RS соответствует одному
нажатию клавиши F12, чтобы показать экран программы.
Очистите окно Soft-ICE, введя:
Введите:
символ (^) - shift + 6. Это назначит команду RS клавише F12,
но сделает эту команду невидимой.
Нажмите клавишу F12 несколько раз. Заметьте что команда
RS больше не выводится в окне Soft-ICE.
Вы также можете назначать функциональной клавише последовательность команд.
Не забывайте ставить знак возврата каретки между командами.
Теперь давайте подготовимся использовать Soft-ICE в дополнение к утилите
MS-DOS DEBUG.
Уберите окно регистров, нажав F2.
Потом сократите размер окна до приблизительно 6 строк
используя ALT .
Введите:
Эта команда заставляет Soft-ICE сгенерировать int 3 при выполнении условий
точки останова. Таким образом, Soft-ICE будет взаимодействовать с DEBUG.
Установка по умолчанию - HERE. ACTION HERE будет заставлять возвращать
управление непосредственно Soft-ICE. Используйте ACTION HERE при работе с
Soft-ICE как с автономным отладчиком.
Тем, кто не использует DEBUG с этой обучающей частью, теперь возможно придется
импровизировать. CODEVIEW работает с ACTION установленным на NMI. Большинство
других отладчиков будет работать с ACTION INT3. Если ваш отладчик не делает
этого и вам необходима помощь для импровизации, обратитесь к полному
описанию ACTION (см. часть 5.4).
Для того чтобы снова убрать окно Soft-ICE, введите:
Это - альтернативный метод для выхода из Soft-ICE. Это особенно
полезно при переопределениях функциональных клавиш.
Теперь, когда вы знакомы с некоторыми из азов использования Soft-ICE, давайте
вникнем в некоторые детали, отлаживая программу-пример (SAMPLE.ASM).
SAMPLE.ASM - простая программа, написанная на Ассемблере
программистом по имени Jed. Программа читает нажатия клавиш из DOS и выводит
сообщение, говорящее был ли нажат пробел.
Для запуска программы SAMPLE, введите:
Теперь нажмите "пробел". Нажмите несколько клавиш. Очевидно у программы Jed'а
проблемы! Jed потратил часы, изучая этот исходный код, и уверен, что в его
логике нет никаких недостатков. Однако, Jed позаимствовал несколько
вспомогательных подпрограмм у его друга Jake'а (get_key, is_space?). Jed
немного подозревает эти подпрограммы, но не может найти ошибку.
Исходный код программы Jed'а выглядит следующим образом:
Page 55,80
Title Пример программы для обучающей части Soft-ICE
DATA Segment Public 'Data'
pad db 12H dup(O)
char db 0
answer db 0
space_msg db 'Был нажат ПРОБЕЛ',0DH,0AH,'$'
no_space_msg db 'Введенный символ - НЕ '
db 'ПРОБЕЛ',0DH,0AH,'$'
DATA Ends
STACK Segment Stack 'Stack'
Dw 128 Dup (?) ;Стек программы
STACK Ends
CODE Segment Public 'Code'
Assume CS:CODE,DS:DATA,ES:Nothing,SS:STACK
start:
; Устанавливаем сегменты
mov ax,DATA
mov es,ax
mov ds,ax
; Основной цикл программы
main_loop:
call get_key
call is_space?
cmp answer,0
je no_space
; Это пробел, выводим сообщение о пробеле
mov ah,9
mov dx,offset space_msg
int 21H
jmp main_loop
; Это НЕ пробел, выводим сообщение об отсутствии пробела
no_space:
mov ah,9
mov dx,offset no_space_msg
int 21H
jmp main_loop
;---------------------;
; ПОДПРОГРАММЫ JAKE'а
;---------------------;
; Подпрограмма Get Key (одна из подпрограмм Jake'а)
get_key proc
mov ah,8
int 21H
mov char,al
ret
get_key endp
; Проверка, является ли символ пробелом (одна из подпрограмм Jake'а)
is_space? proc
cmp char,20H
jne not_space
mov answer,1
ret
not_space:
mov cs:answer,0
ret
is_space? endp
CODE Ends
End start
|
Jed использовал DEBUG, но не был способен решить проблему с его помощью. По
рекомендации его племянника Jethro, Jed купил Soft-ICE. Он немного сомневался
в необходимости этого, потому что он уже пытался использовать отладчик
аппаратного уровня, но так и не смог заставить его правильно работать. Он
хотел попробовать Soft-ICE, потому что он мог бы продолжать использовать DEBUG
- единственный отладчик, с которым он действительно умеет работать.
Нажмите CTRL C, чтобы выйти из программы.
Введите следующие команды:
DEBUG диск:\путь\SAMPLE.EXE
U
R
|
За часы, которые Jed потратил, пытаясь найти эту неуловимую ошибку, он понял,
что что-то непонятным образом записывается поверх его кода. Jed решает при
помощи Soft-ICE установить точку останова на диапазон его сегмента кода.
|