Теоретические сведения:

  Программы – отладчики предназначены для отладки машинных (исполняемых) файлов программ, в первую очередь, типа СОМ или ЕХЕ. Отладчик размещает исполняемую программу в памяти так, как это бы сделала сама операционная система (ОС) в чистом виде (в нашем случае – DOS, у других ОС есть свои отладчики). После загрузки, DOS сразу передает управление на входную точку программы. Если программа типа СОМ, то это будет адрес 100Н. У программ типа ЕХЕ точка входа записана в заголовке программы. Отладчик позволяет выполнять программу в пошаговом режиме, режиме трассировки. Для этого используется специальное прерывание INT 1 процессоров х86. После каждого шага трассировки, если установлен соответствующий бит регистра флагов, управление передается по вектору INT 1. Программа отладчик устанавливает этот вектор на себя и получает возможность управления после каждого шага (команды) исследуемой программы. Обычно в этот момент на экран выводятся сведения о новом содержимом регистров процессора, строка с кодом следующей выполняемой команды и отладчик переходит в режим ожидания следующих команд оператора. Более совершенные отладчики, такие, как TurboDebugger из комплекта Borland Pascal или AvpUtil – антивирусная утилита Касперского, могут показывать состояние стека, содержимое отдельных участков памяти и другую полезную информацию.

Кроме пошаговой трассировки, отладчики позволяют просматривать и "на ходу" изменять содержимое отдельных ячеек памяти, в том числе и командного кода, читать и писать отдельные сектора дисков и целые файлы. Отладчик может выполнять функции ассемблера, то есть переводить мнемокоды, удобные для запоминания и понимания программистом, в коды команд процессора и наоборот, дизассемблировать исследуемую программу для изучения ее работы.

Входящий в стандартный комплект любой версии MS DOS, (в том числе и версии 7.10, известной как Windows 9X) отладчик Debug.exe, является мощным, компактным и весьма полезным средством анализа и отладки программного кода на самом низком уровне. Умение свободно пользоваться отладчиком Debug – обязательное условие успешной работы и обучения системного программиста. Знаменитый Питер Нортон писал: "Если Вы недостаточно искусно владеете языком ассемблера, то единственный путь научиться ему – это не лениться изучать доступные Вам программы на языке ассемблера". Один из источников таких программ – распечатки работы Debug с интересующей Вас программой. С другой стороны, Debug – надежный способ исследования "in vivo" особенностей работы отдельных команд, подпрограмм и устройств в условиях отсутствия полноценной технической информации, (обычная ситуация в наших условиях).

  Обычно программу Debug следует искать в папке С:\Windows\Command. Для работы следует указать путь на эту папку или просто скопировать отладчик в свою рабочую папку. В последнем случае результаты работы будут сохраняться именно в Вашей папке, а не загрязнять весь диск.

Запускают программу-отладчик Debug, двумя способами:

1. Без параметров. Сначала запускают (любым известным способом) саму программу DEBUG, а затем, пользуясь ее командами, загружают исследуемую программу

2. Со строкой параметров, с указанием имени файла.

DEBUG [диск:][маршрут] имя_файла [параметры]

параметры в [ ] скобках могут отсутствовать

[Диск:][маршрут] имя_файла задает расположение и имя отлаживаемого выполняемого файла. "Параметры" задают информацию командной строки, необходимую для запуска выполняемого файла.

   Все команды DEBUG могут быть отменены при вводе Сtrl-C. При вводе Сtrl-S вывод информации на дисплей приостанавливается и возобновляется при нажатии любой клавиши. Для вызова DEBUG в командной строке вводится его имя:

C:> DEBUG

Отладчик DEBUG отвечает выводом символа “ – “ и готов к приему команд. Команды задаются в виде одной буквы, за которой могут следовать один или более параметров. При работе с DEBUG можно использовать принятые в MS DOS управляющиесимволы и специальные редактирующие функции. Все команды отладчика кроме команды Q допускают задание параметров. Параметры могут отделятся друг от друга разделителями - запятыми и пробелами. Однако, обязательным разделителем является разделитель только между двумя соседними шестнадцатиричными значениями. Следующие команды эквивалентны

DCS:100 110

D CS:100 110

D,CS:100,110

В командах могут использоватся следующие параметры: <устройство> - значение от 0 до 3. Эти значения соответствуют устройствам: 0-A, 1- В, 2- C, 3- D;

<байт> - двузначное шестнадцатиричное число, читаемое из памяти или регистра или записываемое в память или регистр;

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

<значение> - шестнадцатиричное значение до четырех знаков используемое для указания номера порта или количества раз выполнения команды;

<адрес > - параметр, состоящий из двух частей: сегмента и смещения. Сегмент может быть задан либо в виде сегментного регистра, либо в виде сегмента по умолчанию. Если сегмент не указан , то принимается сегмент по умолчанию. Для всех команд кроме G,L T ,U сегментными регистром по умолчанию является регистр DS. Для перечисленных команд сегментным регистром по умолчанию является CS. Все числовые значения являются шестнадцатиричными, а между сегментом и смещением указывается двоеточие.

<диапазон> - задается как <адрес> <адрес> или как <адрес> L <значение>, где значение количество строк над которыми команда выполняет действия (по умолчанию L80). Последняя форма не может использоватся, так как оно будет рассматриватся как второй адрес диапазона.

Примеры задания диапазонов:

CS:100 110

CS:100 L 10

CS: 100

Максимальное значение параметра <диапазон> - (10000) шестнадцатиричное. Чтобы указать <значение> , равное 10000, требуется ввести 0000 или 0.

<список> - последовательность символов заключенная в кавычки. Двойные или одинарные кавычки внутри строки должны удваиватся. В качестве значений принимаются коды символов строки. Параметр, заключенный в квадратные скобки является необязательным.