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

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}жка / Donate

Благодарю за поддержку!

Новости сайта

Новости форума

Архив исходников

Automatic translation

[ Вернуться на главную страницу сайта «Delphi Sources» ]

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

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |

| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |

Материалы предоставлены сайтом Delphi World

Введите условия поиска Отправить форму поиска

Web www.delphisources.ru

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

{/codecitation}

Добавить комментарий