Шаг 38.
Отладчик Turbo Debugger for DOS.
Окно CPU. Область кода
На этом шаге мы рассмотрим содержимое области кода окна CPU.
В левой части области кода выводятся адреса дизассемблированных инструкций. Для 16-разрядного кода они имеют
вид "сегмент: смещение". Стрелка (>) справа от адреса памяти указывает текущий адрес программы.
Справа выводится шестнадцатеричный машинный код с соответствующей дизассемблированной инструкцией. Глобальные
идентификаторы выводятся в виде имени, статические - в виде имени модуля с символов # и именем идентификатора,
а номера строк представлены как имя модуля, # и номер строки. Клавиша F2 позволяет устанавливать/отменять точки останова.
Рис.1. Локальное меню области кода
Локальное меню области кода (рисунок 2) содержит команды, позволяющие перемещаться по ней и ассемблировать
вводимые инструкции. Перечислим назначение каждого пункта меню.
- Команда Goto.... После выбора этой команды отладчик запрашивает у пользователя новый
адрес, к которому надо перейти. Можно вводить адреса, находящиеся за пределами программы. Это дает возможность
проверять код BIOS, DOS и резидентных утилит. Для возврата в позицию, которая являлась текущей перед
выполнением команды Goto, можно использовать команду Previous.
- Команда Origin. Позиционирует курсор в текущую точку программы, на которую
указывает пара регистров CS:IP. Этой командой удобно пользоваться, когда необходимо вернуться к
исходной позиции в программе. С помощью команды Previos можно вернуть выделяющий курсор
в подокне кода в позицию, где он был установлен до выполнения команды Origin.
- Команда Follow. Позиционирует курсор в адрес назначения выделенной в данный
момент команды. Курсор в подокне кода позиционируется на команду с адресом, по которому выделенная команда
передает управление. Для команд условного перехода адрес указывается так, как если бы данный переход был
выполнен. Эту команду можно использовать с командами CALL, JMP, командами условного перехода
(JZ, JNE, LOOP, JCXZ и т.д.) и командой INT. С помощью команды Previos можно вернуть
выделяющий курсор в подокне кода в позицию, где он был установлен до выполнения команыды Follow.
- Команда Caller. Позиционирует выделяющий курсор на команду, которая вызвала
текущее прерывание или подпрограмму. Эта команда работает не всегда. Если подпрограмма обработки прерывания
или другая подпрограмма занесла данные в стек, в некоторых случаях Turbo Debugger не может определить,
откуда была вызвана данная подпрограмма. С помощью команды Previos можно вернуть выделяющий курсор
в подокне кода в позицию, где он был установлен до выполнения команыды Caller.
- Команда Previos. Возвращает выделяющий курсор в подокне кода в позицию, где он был
установлен до выполнения последней команды, которая изменила его позицию на экране. Позиция курсора, измененная
с помощью клавиш управления курсором и клавиш PgUp и PgDn, не может быть восстановлена с
помощью команды Previos. При выборе команды Previos позиция выделяющего курсора в подокне
кода запоминается, и при повторных выполнениях этой команды содержимое подокна будет переключаться между
двумя запомненными позициями.
- Команда Search.... Позволяет вам вводить инструкцию или список байт, которые вы хотите
найти. Будьте внимательны при поиске инструкций. Следует выполнять поиск только тех инструкций, которые не
изменяют байт, в которые они ассемблируются, в зависимости от того, где в памяти они ассемблируются.
- Команда View Source. Для вывода исходного кода, соответствующего текущей
дизассемблированной инструкции открывает окно Module. Если соответствующего исходного кода нет
(например, вы находитесь в коде Windows, или отсутствует отладочная информация), вы просто остаетесь в
области кода.
- Команда Mixed. Позволяет выбрать один из трех способов вывода на экран дизассемблированных инструкций и исходного кода:
- No - исходный код не выводится, выводятся только дизассемблированные инструкции;
- Yes - перед первой дизассемблированной инструкцией, соответствующей данной строке, выводится
строка исходного кода. Область устанавливается в данный режим, если исходный модуль написан на языке высокого
уровня;
- Both - для тех строк, которым соответствует исходный код, дизассемблированные строки заменяются
строками исходного текста. В противном случае выводятся дизассемблированные инструкции. Используйте этот режим,
когда вы отлаживаете модуль на ассемблере и хотите видеть строку исходного текста, а не соответствующую
дизассемблированную инструкцию. Область устанавливается в данный режим вывода, если текущим модулем является
исходный модуль ассемблера.
- Команда New CS:IP. Устанавливает указатель текущей позиции программы (содержимое
регистров CS:IP) на выделенный в данный момент адрес. При следующем запуске программы выполнение
начнется с данного адреса. Эту команду удобно применять в тех случаях, когда требуется пройти без выполнения
некоторый фрагмент кода. Этой командой следует пользоваться с особой осторожностью. Если сместить указатель
в точку программы с другим состоянием стека, чем в текущей точке, это вероятнее всего приведет к фатальному сбою
программы. Эту команду не следует использовать для установки указателя текущей позиции программы в точку,
находящуюся за пределами текущей подпрограммы.
- Команда Assemble…. Ассемблирует команду, заменяя ту, которая находится в
выделенной строке. После выбора этой команды отладчик запрашивает команду, которую требуется сассемблировать.
Эту команду можно также вызвать, просто начав вводить команду, которую необходимо сассемблировать.
При этом на экране появляется поле запроса, в точности такое же, как если бы команда Assemble была выбрана
из меню.
На следующем шаге мы рассмотрим область регистров.
Предыдущий шаг
Содержание
Следующий шаг