<<
>>

Отладчик машинных программ debug

Обычно программист, работающий с языками высокого уровня типа Паскаль, С или Ява, не использует коды машинных команд, регистры и флажки процессо- ра и т. д. Такой программист работает на совершенно другом уровне абстракции, взаимодействуя с аппаратурой компьютера, с его процессором и оперативной па- мятью через промежуточные уровни операционной системы и инструменталь- ных средств используемой системы программирования.
Даже программист, ра- ботающий с языком Ассемблер, имеет'дело в основном с мнемокодами.

Одна из немногих возможностей напрямую работать с «живыми» машинными кодами команд, с полями оперативной памяти, регистрами процессора и т. д. состо- ит в использовании входящего в операционную систему MS DOS отладчика debug. Эта программа доступна и из операционных систем семейств Windows 9х/ХР. Вызвать ее на выполнение можно следующим образом: командой Пуск ► Выполнить открыть окно Запуск программы, затем в поле ввода Открыть задать имя debug. Запускается отладчик в стандартном окне Windows (рис.

4.191), работа с кото- рым, в принципе, может быть заменена режимом отображения во весь экран. Но в некоторых версиях Windows этот режим неустойчив, поэтому рекомендуется оставаться в стандартном окне.

Программа debug предназначена для отладки программ на уровне машинных кодов. Полный набор возможностей этой программы можно найти в любом спра- вочном руководстве по командам операционной системы MS DOS. В частности, отладчик debug обеспечивает:

? прямой ввод кодов программ и данных в выбранные поля оперативной памя- ти, причем коды могут вводиться как в машинном (шестнадцатеричном), так и в ассемблерном формате;

? редактирование содержимого полей памяти в шестнадцатеричном или сим- вольном виде;

? запуск программ на выполнение в обычном режиме и в режиме трассировки;

Содержимое рабочей зоны окна представлено на рисунке в инвертированном цвете.

Рис.

4.19. Пример окна отладчика

? просмотр содержимого выбранного участка оперативной памяти;

? просмотр содержимого регистров процессора;

? целый ряд других режимов, которые обслуживают все связанные с отладкой программ действия.

Сразу после запуска отладчика он, так же как и операционная система MS DOS, переходит в режим ожидания команд пользователя, о чем говорит приглашение к вводу, которое имеет вид мигающей черточки в первой позиции текущей стро- ки. Управление работой отладчика осуществляется с помощью его внутренних команд, каждая из которых вводится в соответствии с правилами работы с ко- мандной строкой операционной системы MS DOS. В частности, при вводе ко- манд можно использовать клавишу Backspace для удаления последнего введен- ного символа. Набор команды завершается нажатием на клавишу Enter.

Из всей совокупности команд отладчика рассмотрим только пять команд, кото- рые необходимы при дальнейшем обсуждении работы с отладчиком. Ввод кодов программ и данных в выбранный участок оперативной памяти, а также их редак- тирование в шестнадцатеричном виде можно выполнить с помощью команды Е или е (от enter, можно использовать как строчные, так и прописные буквы), ко- торая имеет формат

е

Элемент команды задается в виде пары S:смещение, где 5 — имя сегментного регистра, а 0 < смещение < FFFF16 — заданное шестнадцатеричным числом внутрисегментное смещение, причем ведущие нули в смещении можно опускать, например, ds:2О или сs:ЮО.

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

е ds:2О Оа f4 17 2b

последовательные байты сегмента данных со смещениями 002016, 002116, 002216 и 002316 заполняются указанными в команде шестнадцатеричными кодами 0 а f 4 17 2b.

Эта команда показана в первой строке окна отладчика на рис. 4.19.

Во второй строке окна приведен пример реакции отладчика на допущенную при вводе ошибку: программа отмечает знаком ^ первый, по ее мнению, неправиль- ный символ команды и рядом выводит слово «ошибка». В данном случае оши- бочно не введен пробел между кодами двух соседних байтов f f и с7. Ниже по- казана эта же команда в правильном варианте ввода.

Для изменения содержимого какого-либо байта или поля памяти с помощью коман- ды е достаточно указать в ней адрес этого байта или поля и его новое содержимое.

Во время отладки довольно часто приходится просматривать содержимое неко- торого участка оперативной памяти.

ВНИМАНИЕ -------------------------------------------------------------------------------------------------------

Отображение на экране дисплея или на бумаге содержимого некоторого участка оперативной памяти в виде шестнадцатеричных кодов, а также в символьном виде принято называть дампом памяти (от dump — свалка).

Вывод дампа в отладчике debug производится по команде d (от dump), которая имеет следующую структуру:

d

где задает начальный и конечный адреса участка памяти, дамп которого нужно выдать. Эти адреса задаются с помощью расположенных после названия сегментного регистра и разделенных пробелом внутрисегмент- ных смещений начала и конца участка, например:

d ds:100 120

Обратите внимание! Конечный адрес участка задается только смещением, назва- ние сегментного регистра задавать вновь нельзя! Естественно, конечный адрес должен быть не меньше начального. Кроме того, конечный адрес может отсут- ствовать. В этом случае программа выведет на экран содержимое 128 байтов, на- чинающихся с заданного начального адреса.

На рис. 4.19 показаны две команды вывода дампа памяти. В первом случае запра- шивается вывод дампа с адреса ds:ОО2О, а во втором — с адреса сs:ОЮО. Каж- дая строка дампа начинается с адреса выводимого участка памяти, записываемо- го в виде S:D. Далее в виде шестнадцатеричных кодов выводится содержимое 16 последовательных байтов памяти.

А затем это же содержимое отображается в символьном виде с использованием кодировки ASCII. Именно такая форма вывода считается стандартной для дампов памяти. Просматривая примеры дам- пов памяти, легко убедиться в том, что отладчик совершенно правильно запол- нил указанные в предыдущих командах е поля памяти.

Рис. 4.20. Примеры команд отладчика debug

Для просмотра содержимого некоторого регистра процессора служит команда г (от register), имею цая следующий формат:

г

где — символьное название регистра. Например, команда г сх выводит на экран содержимое регистра сх.

Эта команда может использоваться без параметров, при этом на экран выводит- ся содержимое всех регистров процессора, значения всех флажков, а также ад- рес, код и ассемблерный формат текущей машинной команды. Если в команде определяется адрес поля памяти, то выводится и его содержимое вместе с вычис- ленным эффективным адресом. Заметим, что именно в такой форме удобнее все- го использовать команду г.

На рис. 4.20 приведен пример выполнения команды г без параметров. Видно, что операционная система при запуске программы загружает нулевые коды 000016 во все регистры общего назначения, а также индексные и базовые регистры (кро- ме регистра sр, о котором мы будем говорить далее). Сегментные регистры со- держат коды, значения которых существенно зависят от текущей ситуации, от используемой операционной системы, от имеющегося в компьютере фактическо- го объема оперативной памяти и от многих других факторов. В данном случае во все сегментные регистры загружен код 151616.

Таблица 4.18. Обозначения состояния флажков процессора в отладчике debug

Далее во второй строке вывода отладчика находятся содержимое регистра iр и цепочка буквенных обозначений состояний флажков процессора: NV UP EI РL

NZ NА РО NС.

Соответствие между значениями флажков и их обозначениями в отладчике приведены в табл. 4.18. Отметим, что флажки в таблице приведены в порядке их размещения в регистре флажков, а обозначения значений для флаж- ка трассировки tf отсутствуют. В рассматриваемом примере флажки показыва- ют, что переполнение отсутствует (of = NV = 0), цепочечные операции выполня- ются в направлении возрастания адресов (df = UP = 0), прерывания разрешены (if = ЕI = 0), результат неотрицательный (sf = РL = 0), результат ненулевой (zf = NZ = 0), дополнительного переноса нет (аf = NА = 0), паритет нечетный (рf = РО = 0) и перенос отсутствует (сf = СY = 0).

В последней, третьей строке отладчик выводит полный адрес текущей команды 1516:0100, ее машинный FF С7 и ассемблерный iпс di форматы.

Для выполнения программы в отладчике имеются две команды. Команда g (от go) в формате

д

запускает на выполнение машинную программу в обычном (безостановочном) режиме. Выполнение начинается с команды, адрес которой задан параметром . Если параметр в команде опущен, то отладчик пытается осуще- ствить запуск программы с адреса, определяемого содержимым пары сs:iр.

Команда t (от trace — следить) в том же формате

t

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

В нижней части рис. 4.20 показан пример выполнения команды трассировки t. Обратите внимание на содержимое регистра di и сравните его со значением, вы- данным по предыдущей команде просмотра регистров. Видно, что команда ин- кремента его содержимого уже выполнена. Далее обратите внимание на содер- жимое регистра iр, на адрес следующей команды 1516:0102, на ее код 000016 и на ее ассемблерный формат add [dх+si], аl. Видно, что в команде используется косвенная адресация с базированием и индексированием [dх+si]. Поскольку операнд команды выбирается из поля памяти, отладчик определяет его физи- ческий адрес и помещает и сам адрес, и операнд, находящийся по этому адресу, в конце последней строки вывода ds:ОООО = CD.

Завершение работы отладчика осуществляется с помощью команды q, не имею- щей параметров. Отметим, что закрытие окна другими способами (например, со- четанием Аlt+F4) некорректно и вызывает «возражения» операционной системы.

<< | >>
Источник: Степанов А. Н.. Архитектура вычислительных систем и компьютерных сетей. 2007

Еще по теме Отладчик машинных программ debug:

  1. Программа Да и программа Нет
  2. СИСТЕМА «ЧЕЛОВЕК - МАШИНА»: НАДЕЖНОСТЬ
  3. Как обзавестись новой машиной
  4. Огонь и машина физического бессмертия
  5. Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ
  6. А.П. Пятибратов, Л.П. Гудыно, А.А. Кириченко. Вычислительные машины, сети и телекоммуникационные системы, 2009
  7. Статья 415. Нарушение правил вождения или эксплуатации машин
  8. Запомните: вы водитель автомобиля; вам не нужно вставать из-за руля и толкать свою машину.
  9. Чтобы ехать на машине, вам не надо бросать руль и толкать ее.
  10. Раздел 16 - Уголовного Кодекса Украины Преступления в сфере использования электронно-вычислительных машин (компьютеров), систем и компьютерных сетей и сетей электросвязи
  11. ПРОЕКТНЫЙ И ИСПОЛНИТЕЛЬНЫЙ УРОВНИ ПРОГРАММ
  12. Статья 361. Несанкционированное вмешательство в работу электронно-вычислительных машин (компьютеров), автоматизированных систем, компьютерных сетей или сетей электросвязи
  13. Музыкальные концертные программы
  14. Г л а в а 9 О ПРОГРАММАХ
  15. Статья 363-1. Препятствование работе электронно-вычислительных машин (компьютеров), автоматизированных систем, компьютерных сетей или сетей электросвязи путем массового распространение сообщений электросвязи
  16. Программа телевидения