скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Руководство по Soft-ICE (DOS) - 4


- Виндовс это не вирус. Вирусы не глючат.

Окно Soft-ICE только что исчезло. Чтобы вернуться в окно Soft-ICE, отпустите клавишу ALT, а потом нажмите: ALT D

Окно восстановилось. Для просмотра предыдущих команд, нажмите: клавишу стрелка вверх несколько раз.

Имейте в виду, что Soft-ICE помнит команды, которые были введены. Попробуйте отредактировать одну просто для забавы. Вот некоторые клавиши редактирования:

INS -- переключает режим вставки
DEL -- Удаляет один символ
HOME -- Перемещает курсор в начало строки
END -- Перемещает курсор в конец строки
стрелка вправо -- Перемещает курсор на символ вправо
стрелка влево -- Перемещает курсор на символ влево

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

Теперь, когда вы немного знакомы с окружением, давайте, попробуем некоторые другие команды.

Сотрите команду, которую вы редактировали, нажав клавишу HOME, потом нажимая клавишу DEL пока команда не исчезнет.

Введите:


WR

Команда WR делает видимым окно регистров. Окно регистров показывает содержимое регистров 8086. Заметьте что значения регистров отражают местоположение, где выполнялся код, когда вы вызвали Soft-ICE.

Команда WR назначена в файле инициализации Soft-ICE, S-ICE.DAT на функциональную клавишу F2.

Нажмите клавишу F2 несколько раз, и вы увидите, как включается/выключается окно регистров. Оставьте окно регистров видимым.

Увеличьте вертикальный размер окна Soft-ICE, держа нажатыми ALT и , пока окно не займет весь экран. Запомните значения регистров CS и IP в окне регистров, потом введите:


MAP

Команда MAP покажет карту памяти системы. Область текущего указателя инструкций (CS:IP) будет подсвечена. Если у вас сложная карта памяти, вам может быть придется несколько раз нажать клавишу, пока вновь не появится командная строка.

Теперь попробуйте следующую последовательность несколько раз, запоминая регистры (CS:IP) в окне регистров.


ALT D

Отпустите ALT и D


ALT D

Каждый раз при возвращении в окно Soft-ICE, вы будет замечать что регистры CS и IP изменились. Когда CS и IP изменились, вы может ввести команду MAP снова и посмотреть, показывает ли теперь указатель инструкций на другую область.

Это небольшое упражнение демонстрирует, что Soft-ICE является отладчиком системного уровня, который всплывает по горячей комбинации клавиш Soft-ICE, куда бы ни показывал указатель инструкций. Указатель инструкций непрерывно меняется, потому что выполняется множество команд между вызовами, даже когда вы - в командной строке DOS, типа прерываний таймера, работы драйверов устройств DOS, занятости DOS при ожидании других прерываний и т.д.

Нажмите функциональную клавишу F12.

Функциональной клавише F12 по умолчанию назначена команда VER. Она выводит сообщение об авторских правах на Soft-ICE и номер версии. Теперь мы назначим функциональной клавише F12 команду RS.

Введите:


RS

Она временно покажет экран программы без окна Soft-ICE. Нажмите "пробел", чтобы вернуться в окно Soft-ICE.

Введите:


FKEY F12 RS;

Это назначает команду RS на клавишу F12. Точка с запятой заменяет клавишу ВВОД.

Нажмите клавишу F12.

Повторите это несколько раз для переключения между окном Soft-ICE и экраном программы. Теперь удостоверьтесь, что выведено окно Soft-ICE, при необходимости, нажав клавишу F12. Вы заметите, что RS выведен в окне несколько раз. Одно появление на экране команды RS соответствует одному нажатию клавиши F12, чтобы показать экран программы.

Очистите окно Soft-ICE, введя:


CLS

Введите:


FKEY F12 ^RS;

символ (^) - shift + 6. Это назначит команду RS клавише F12, но сделает эту команду невидимой.

Нажмите клавишу F12 несколько раз. Заметьте что команда RS больше не выводится в окне Soft-ICE.

Вы также можете назначать функциональной клавише последовательность команд. Не забывайте ставить знак возврата каретки между командами. Теперь давайте подготовимся использовать Soft-ICE в дополнение к утилите MS-DOS DEBUG.

Уберите окно регистров, нажав F2. Потом сократите размер окна до приблизительно 6 строк используя ALT .

Введите:


ACTION INT3

Эта команда заставляет 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, введите:


X

Это - альтернативный метод для выхода из Soft-ICE. Это особенно полезно при переопределениях функциональных клавиш.

Теперь, когда вы знакомы с некоторыми из азов использования Soft-ICE, давайте вникнем в некоторые детали, отлаживая программу-пример (SAMPLE.ASM).

SAMPLE.ASM - простая программа, написанная на Ассемблере программистом по имени Jed. Программа читает нажатия клавиш из DOS и выводит сообщение, говорящее был ли нажат пробел.

Для запуска программы SAMPLE, введите:


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 установить точку останова на диапазон его сегмента кода.






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook