Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Руководство по Soft-ICE (DOS) - 4
Автор: Сергей Середа
WEB-сайт: http://consumer.nm.ru

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

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

Проект Delphi World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.