Что такое debug exe утилита. Работа с командной строкой Windows, Программа Debug и её использование. Типовые примеры ассемблерных программ

На iOS - iPhone, iPod touch 19.02.2019
На iOS - iPhone, iPod touch

Debug — что это? Debug, или отладка. в компьютерном программировании и разработке, — это многоэтапный процесс, который включает определение проблемы, выявление ее источника, а затем исправление сбоя или выбор способа дальнейшей работы. Последним шагом отладки является проверка корректного исправления.

Введение

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

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

Debug — что это? Описание процесса

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

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

Debug в контексте MS-DOS

В MS-DOS Debug — что команда, которая позволяет программистам исследовать и изменять источники содержимого памяти, которые происходят в операционной системе. Методика предоставления инструкций по компьютерным задачам через интерфейс командной строки изначально использовалась в средах MS-DOS для перевода кода ассемблера в рабочий код и машинного языка в исполняемые (debug.exe) файлы.

Debug позволяет разработчикам просматривать содержимое памяти, вносить изменения, а затем выполнять COM, .exe и другие типы файлов.

История

Microsoft впервые представила команду debug в MS-DOS 1.0 в качестве метода Была добавлена ​​дополнительная функциональность — инструмент ориентировался на различные операционные задачи, такие как отображение содержимого части памяти, ввод данных по указанному адресу, запуск исполняемых файлов памяти, шестнадцатеричная арифметика и манипуляция регистрационной памятью.

Важный этап обнаружения ошибок

После выявления программного сбоя необходимо найти ошибку в коде (Debug error). На этом этапе полезно просмотреть ведение журнала кода и использовать автономный инструмент отладчика или компонент отладки интегрированной среды разработки (IDE). Изначально обнаруживаются и фиксируются ошибки в наиболее популярных функциях. В некоторых случаях модуль, представляющий проблему, очевиден, а сама строка кода — нет. В этом случае модульные тесты, такие как JUnit и xUnit, которые позволяют программисту запускать определенную функцию с конкретными входами, могут быть полезны при отладке.

Процесс отладки

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

Общие инструменты отладки

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

Поиск и удаление ошибок программного обеспечения

Некоторые инструменты, особенно инструменты с и языки сценариев, не запускаются в среде IDE и требуют ручного подхода к отладке. Такие методы включают в себя сброс значений в журнал, расширенные «печатные» заявления, добавленные во время выполнения кода или жестко закодированные debug-команды (например, wait), которые имитируют точку остановки, ожидая ввода клавиатуры в определенное время.

Debug Dump Files — можно ли удалить?

Многие пользователи после возникновения сбоя обнаруживают в месте хранения программы системные файлы. Документы носят наименование Debug Dump Files. Можно ли удалить их? Это отладочные файлы, которые создаются после нарушения работы ПО, чтобы помочь определить причину возникновения ошибки. Если вы не пытаетесь устранить проблему, то можете удалить их.

Запуск Debug.exe, программы для проверки и отладки исполнительных файлов MS-DOS. Выполненная без параметров команда debug запускает программу Debug.exe и выводит приглашение команды debug ,
представленное дефисом (-).

Синтаксис

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

Параметры

[диск : ][путь ] имя_файла Задание расположения и имени исполняемого файла для тестирования. параметры Указание параметров командной строки, передаваемых отлаживаемой программе. ? Вывод списка подкоманд команды debug .

Примечания

  • Использование команд подсистемы MS-DOS

    Команда debug это команда подсистемы MS-DOS, которая выполняется в среде WOW/NTVDM.

  • Разделитель параметров команды

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

  • Использование команд debug

    Существует несколько команд debug , которыми можно воспользоваться.

Debug: a (assemble)

Создание двоичного кода процессоров 8086/8087/8088 непосредственно в памяти. Выполненная без параметров команда a начинает работу с точки последнего останова.

Синтаксис

a [адрес ]

Параметры

адрес Задает адрес, по которому записаны инструкции на языке ассемблер. Параметр адрес принимает шестнадцатеричные значения без знака h . ? Вывод списка команд debug .

Примечания

  • Задание правильных записей адреса

    Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр можно пропустить. По умолчанию для команд debug a , g , l , t , u и w адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Примеры правильных адресов:

  • Задание мнемоник префикса

    Задайте мнемонику префикса инструкции перед кодом операции (т. е. opcode), к которой она относится. Команда a создает исполняемый машинный код из инструкций на языке ассемблера. Все числовые значения должны быть представлены в шестнадцатеричном формате и записаны как набор от 1 до 4 символов.

  • Использование мнемоник

    Мнемоники cs: , ds: , es: и ss: . Мнемоникой, вызывающей возврат управления в другой сегмент кода (far return), является retf . Мнемоники для работы со строками должны точно определять размер элементов строк. Например, для перемещения строк из слов (16 бит) следует использовать movsw , а для перемещения строк из байтов (8 бит) следует использовать movsb .

  • Задание переходов и вызовы функций

    Ассемблер автоматически обрабатывает переходы и вызовы (т. е. префиксы short, near или far) в зависимости от смещения байтов. Имеется возможность переопределить переходы или вызовы с помощью префиксов near или far . Например:

    A0100:0500
    0100:0500 jmp 502 ; короткий (short) переход на 2 байта
    0100:0502 jmp near 505 ; ближний (near) переход на 3 байта
    0100:0505 jmp far 50a ; длинный (far) переход на 5 байтов

    Вместо префикса near можно использовать сокращение ne .

  • Задание адреса слова или байта в памяти

    Если операнды ссылаются на адреса слов или байтов в памяти, тип данных должен быть задан с использованием префикса word ptr или byte ptr , которые можно сократить до wo для word ptr и до by для byte ptr . Например:

    dec wo
    neg byte ptr

  • Задание операндов

    В программе Debug.exe используется общее соглашение о том, что операнды, указывающие на адрес в памяти, заключаются в квадратные скобки (). Это единственный способ, который позволяет различать непосредственные операнды и ссылки на области в памяти в Debug.exe. Например:

    mov ax,21 ; загрузить число 21h в регистр AX
    mov ax, ; загрузить содержимое
    ; памяти по адресу 21h
    ; в регистр AX

  • Псевдоинструкции

    С командой a часто используются две псевдоинструкции: операция db , которая размещает байты непосредственно в памяти, и операция dw , которая размещает в памяти слова. Например:

    db 1,2,3,4,"ЭТО ПРИМЕР"
    db "ЭТО КАВЫЧКА: ""
    db "ЭТО КАВЫЧКА: ""
    dw 1000,2000,3000,"BACH"

  • Ввод данных в определенные байты
  • Деассемблирование байт

Примеры

Команда a допускает различное использование ссылок на регистры. Например:

add bx,34.
pop
push )

Кроме того, команда a поддерживает использование синонимов дополнительных кодов операций: Например:

loopz 100
loope 100
ja 200
jnbe 200

Для дополнительных кодов операций процессора 8087 необходимо задать префиксы wait или fwait . Например:

fwait fadd st,st(3) ; эта строка вставляет
; в код префикса fwait

Debug: c (compare)

Сравнение двух блоков памяти.

Синтаксис

c диапазон адрес

Параметры

диапазон Обязательный параметр. Задание начального и конечного адреса или начального адресы и длины первой области в памяти для сравнения. адрес Обязательный параметр. Задание начального адреса второй области памяти для сравнения. ? Вывод списка команд debug .

Примечания

  • Задание правильных записей диапазона

    Параметр диапазон используется в командах debug для задания диапазона памяти. Для задания диапазона можно использовать один из следующих форматов: начальный и конечный адрес или начальный адрес и длина (разделяются символом l ) диапазона. Например, обе следующих команды задают 16-разрядный диапазон, начинающийся с адреса CS:100:

  • Задание правильных записей адреса

    Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для команд debug a , g , l , t , u и w адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

  • Если параметры диапазон и адрес совпадают, команда c ничего не выводит и возвращается к приглашению debug . Если при сравнении блоков памяти обнаружены различия, они выводятся командой c в следующем виде:

    адрес1 байт1 байт2 адрес2

Примеры

Чтобы сравнить блок памяти от 100h до 10Fh с блоком памяти от 300h до 30Fh, введите следующую команду:

c100,10f 300

Обе эти команды выведут следующие данные (предполагается, что DS = 197F):

197F:0100 4D E4 197F:0300
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197F:010A 80 0A 197F:030A
197F:010B 36 7F 197F:030B
197F:010C BE 22 197F:030C
197F:010D 83 93 197F:030D
197F:010E 49 77 197F:030E
197F:010F 4F 8A 197F:030F

Адреса 197F:0106 и 197F:0306 отсутствуют в списке. Это означает, что значения, расположенные по этим адресам, совпадают.

Debug: d (dump)

Просмотр содержимого заданного диапазона адресов памяти. Выполненная без параметров команда d выводит на экран содержимое 128 байт, начиная с конца диапазона адресов, заданного в предыдущей команде d .

Синтаксис

d [диапазон ]

Параметры

диапазон Задание начального и конечного адреса или начального адреса и длины блока памяти для просмотра его содержимого. ? Вывод списка команд debug .

Примечания

  • Задание правильных записей диапазона

    Параметр диапазон используется в подкомандах debug диапазон l

  • Если используется подкоманда d , содержимое памяти выводится командой Debug.exe двумя частями: шестнадцатеричной (каждый байт представлен в шестнадцатеричном формате) и текстовой (каждый байт представлен символом ASCII). Непечатаемые символы отображаются точкой (.) в текстовой части. Каждая строка на экране представляет содержимое 16 байт со знаком тире между восьмым и девятым байтом. Все строки начинаются на 16-ти байтной границе.

Примеры

Введите следующую команду:

Команда debug.exe выводит содержимое диапазона в следующем формате:

04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00.....

Команда Debug.exe выводит сведения в таком формате, если подкоманда d выполнена без параметров. Каждая строка на экране начинается с адреса, который отстоит от адреса предыдущей строки на 16 байт (или на 8 байт для экрана с 40 колонками). Для каждой последующей подкоманды d , вводимой без параметров, Debug.exe выводит следующую часть сведений непосредственно за предыдущей.

Чтобы вывести содержимое 20h байт, начиная с CS:100, введите следующую команду:

Чтобы вывести содержимое всех байт в диапазоне от 100h до 115h в сегменте CS, введите следующую команду:

Debug: e (enter)

Ввод данных в память по заданному адресу.

Синтаксис

e адрес [список ]

Параметры

адрес Обязательный параметр. Адрес начала области памяти для ввода данных. список Задание списка байтов, которые требуется ввести в память. ? Вывод списка подкоманд debug .

Примечания

  • Задание правильных записей адреса

    Адрес a , g , l , t , u и w команды debug

  • Использование параметра адрес

    При задании параметра адрес без указания параметра список Debug.exe выведет на экран адрес и его содержимое, затем повторит адрес на следующей строке и будет ждать ввода новой команды. В этот момент можно выполнить одно из следующих действий.

    • Заменить байт данных. Для этого введите новое значение. Если введенное значение не является допустимым шестнадцатеричным числом или содержит более двух цифр, Debug.exe не выводит на экран неверные или избыточные символы.
    • Перейти к следующему байту. Для этого нажмите клавишу ПРОБЕЛ. Для изменения данного байта введите новое значение после текущего. Если при нажатии клавиши ПРОБЕЛ пройдена 8-байтная граница, Debug.exe выводит на экран новую строку с новым адресом в начале строки.
    • Возвратиться к предыдущему байту. Для этого нажмите клавишу МИНУС. Для перемещения назад более чем на один байт нажмите эту клавишу несколько раз. При нажатии клавиши МИНУС Debug.exe выводит новую строку с текущим адресом и значением.
    • Остановить выполнение подкоманды e . Для этого нажмите клавишу ENTER. Это можно сделать в любой позиции курсора.
  • Использование параметра список

    Если введен параметр список , подкоманда e последовательно заменяет существующие значения значениями из списка. При возникновении ошибки никакие значения не будут изменены.

    Список может быть задан как шестнадцатеричными числами, так и строкой. При этом числа разделяются пробелами, запятыми или символами табуляции. Строки необходимо заключать в апострофы (т. е. " строка " ) или кавычки (т. е. " строка " ).

  • Создание двоичного кода
  • Просмотр содержимого области памяти

Примеры

Введите следующую команду:

Debug.exe выведет содержимое первого байта в следующем формате:

Чтобы заменить это значение числом 41, введите 41 в позицию курсора, как показано ниже:

04BA:0100 EB.41 _

Последовательность байтов можно ввести в одной подкоманде e . Вместо нажатия клавиши Enter после нового значения, нажмите клавишу ПРОБЕЛ. Программа Debug.exe выведет следующее значение. В данном примере, если клавиша ПРОБЕЛ нажата три раза, Debug.exe выведет на экран следующие значения:

04BA:0100 EB.41 10. 00. BC._

Чтобы заменить шестнадцатеричное значение BC числом 42, введите 42 в позицию курсора, как показано ниже:

04BA:0100 EB.41 10. 00. BC.42 _

Чтобы изменить значение 10 на 6F, дважды нажмите клавишу МИНУС для возврата к адресу 0101 (значение 10). Программа Debug.exe выводит следующие сведения:

04BA:0100 EB.41 10. 00. BC.42-
04BA:0102 00.-
04BA:0101 10._

Введите 6F в позицию курсора для изменения значения, как показано ниже:

04BA:0101 10.6F _

Нажмите клавишу ENTER для завершения выполнения подкоманды e и возврата к приглашению программы debug .

Рассмотрим пример ввода строковой величины:

eds:100 "Это пример текста"

Эта строка будет занимать 24 байта, начиная с адреса DS:100.

Debug: f (fill)

Заполнение адресов в определенной области памяти заданными значениями.

Синтаксис

f диапазон список

Параметры

диапазон Обязательный параметр. Задание начального и конечного адреса или начального адреса и длины области памяти, которую требуется заполнить. список Обязательный параметр. Задание данных, которые требуется ввести. ? Вывод списка подкоманд debug .

Примечания

  • Задание правильных записей диапазона

    Параметр диапазон используется в подкомандах debug для задания диапазона памяти. Параметр диапазон можно задать в одном из следующих форматов: начальный адрес и конечный адрес или начальный адрес и длина (обозначаемая l ) диапазона. Например, оба следующих выражения задают диапазон из 16 байтов, начинающийся с адреса CS:100:

  • Задание данных

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

  • Использование параметра список

    Список может состоять из шестнадцатеричных чисел или строки, заключенной в кавычки (т. е. " строка " ).

Примеры

Чтобы заполнить область памяти с 04BA:100 по 04BA:1FF пятью определенными значениями (например 42, 45, 52, 54, 41) и повторять этот набор, пока 100h байт не будут заполнены программой Debug.exe, введите следующую команду:

f04ba:100l100 42 45 52 54 41

Debug: g (go)

Выполнение загруженной программы. Запущенная без параметров подкоманда g начинает выполнение с текущего адреса в реестрах CS:IP.

Синтаксис

g [= адрес ] [точки_останова ]

Параметры

адрес Задание адреса в памяти, с которого требуется начать выполнение программы. точки_останова Указание до 10 временных точек останова, которые могут быть заданы как часть подкоманды g . ? Вывод списка подкоманд debug .

Примечания

  • Задание правильных записей адреса

    Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a , g , l , t , u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

  • Использование параметра адрес

    Введите знак равенства (=) перед параметром адрес , чтобы отличить адрес от адресов точек останова (точки_останова ).

  • Задание точек останова

    Выполнение программы будет остановлено в первой встретившейся точке останова, независимо от расположения этой точки останова в списке параметра точки_останова . Debug.exe заменяет код, находящийся в точках останова, на инструкции прерывания.

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

    Если программа не остановлена ни в одной точке, Debug.exe не заменяет коды прерываний первоначальными инструкциями.

    Точки останова могут быть установлены только по адресам, содержащим первый байт кода операции 8086 (opcode). Если установлено больше 10 точек останова, выводится следующее сообщение:

  • Использование указателя на стек, задаваемый пользователем

    Указатель на стек, задаваемый пользователем, должен быть допустимым, а емкость стека должна быть не менее 6 байт для подкоманды g . Для перехода к тестируемой программе в подкоманде g используется инструкция iret . Debug.exe устанавливает указатель на стек пользователя, помещает туда пользовательские флаги состояния, значение регистра кодового сегмента и указатель на текущую команду. (Если заданный пользователем стек неверен или имеет недостаточный объем, возможен сбой в операционной системе). Debug.exe записывает код прерывания (т. е. 0CCh) в указанные точки останова или адреса.

  • Перезапуск программы

    Не перезапускайте программу при получении следующего сообщения:

    Program terminated normally

    Чтобы правильно запустить программу, перезагрузите ее с помощью подкоманд n (name) и l (load).

Примеры

Чтобы запустить текущую программу и выполнить ее до точки останова по адресу 7550 в сегменте CS, введите следующую команду.

Debug.exe выведет на экран содержимое регистров и состояние флагов, а затем остановит подкоманду g .

Чтобы установить две точки останова, введите следующую команду:

gcs:7550, cs:8000

Если подкоманда g введена снова после остановки в точке останова, выполнение начнется с инструкции, следующей за точкой останова, а не с обычного адреса начала программы.

Debug: h (hexadecimal)

Выполнение шестнадцатеричных арифметических операций над двумя заданными числами.

Синтаксис

h число1 число2

Параметры

число1 Обязательный параметр. Первое шестнадцатеричное число в диапазоне от 0 до FFFFh. число2 Обязательный параметр. Второе шестнадцатеричное число в диапазоне от 0 до FFFFh. ? Вывод списка подкоманд debug .

Заметки

  • В программе Debug.exe два введенных числа складываются, а затем вычисляется их разность. Результаты вычислений выводятся в одной строке вначале сумма, затем разность.

Примеры

Введите следующую команду:

Результаты вычислений Debug.exe будут выведены в виде:

Debug: i (input)

Считывание и вывод на экран одного байта из указанного порта ввода.

Синтаксис

i порт

Параметры

порт Обязательный параметр. Задание порта ввода адресом. Адрес может быть 16-битным значением. ? Вывод списка подкоманд debug .

Примеры

Введите следующую команду:

Если находящаяся в порту величина равна 42h, Debug.exe считает ее и выведет в следующем виде:

Debug: l (load)

Загрузка файла или содержимого сектора диска в память. Выполненная без параметров подкоманда l загружает файл, указанный в командной строке программы debug , в память, начиная с адреса CS:100. В регистрах BX и CX указывается количество загруженных байт. Если имя файла не было задано в командной строке debug , используется файл, ранее заданный при вызове последней подкоманды n .

Синтаксис

l [адрес ]

l [адрес ] [диск ] [первый_сектор ] [ число ]

Параметры

адрес Задание адреса области памяти, в которую требуется загрузить содержимое файла или сектора. Если параметр адрес не задан, используется текущий адрес в регистре CS. диск Задание накопителя, содержащего диск, с которого считываются определенные сектора. Данный параметр задается числом: 0 = A, 1 = B, 2 = C и т. д. первый_сектор Задание шестнадцатеричного номера первого сектора, содержимое которого требуется загрузить. число Задание шестнадцатеричного числа последовательных секторов, содержимое которых требуется загрузить. Параметры диск , первый_сектор и число используются только в том случае, когда необходимо загрузить содержимое определенных секторов, а не файл, указанный в командной строке debug или в последней подкоманде n (name). ? Вывод списка подкоманд debug .

Заметки

  • Для загрузки задаваемого регистрами BX:CX числа байтов из файла на диске используется следующий синтаксис:

    l [адрес ]

  • Для пропуска файловой системы и прямой загрузки указанных секторов используется следующий синтаксис:

    l [адрес ] [диск ] [первый_сектор ] [ число ]

  • Задание правильных записей адреса

    Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a , g , l , t , u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. All numeric values are in hexadecimal format. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

  • Использование параметра адрес

    При вызове подкоманды l с указанием параметра адрес Debug.exe загрузит файл или содержимое сектора диска в область памяти, начиная с адреса .

  • Использование всех параметров

    При вызове подкоманды l со всеми параметрами Debug.exe загружает содержимое сектора диска, а не файла.

  • Загрузка содержимого сектора диска

    Каждый сектор в указанном диапазоне считывается с диска, заданного параметром диск . Debug.exe начинает загрузку с первого_сектора и последовательно загружает сектора в память, пока не будет загружено заданное число секторов.

  • Загрузка файла.exe

    Для файлов с расширением.exe параметр адрес игнорируется. В этом случае Debug.exe использует загрузочный адрес, задаваемый в заголовке.exe файла. При загрузке заголовок отделяется от самого.exe файла, загружаемого в память, поэтому размер файла, указанный в заголовке, и фактически занимаемый размер в памяти будут различаться. Для просмотра.exe файла целиком он может быть переименован в файл с другим расширением и затем просмотрен в программе Debug.

  • Загрузка файлов.hex

    В программе Debug.exe файлы с расширением.hex распознаются как файлы в шестнадцатеричном формате. Подкоманду l можно запустить без параметров для загрузки такого шестнадцатеричного файла, начиная с адреса, указанного в данном файле. Если подкоманда l запущена с параметром адрес , начальная точка загрузки определяется как сумма заданного адреса и адреса, содержащегося в шестнадцатеричном файле.

Примеры

В командной строке введите:

Введите следующую команду:

Чтобы загрузить файл File.com, введите следующую команду:

Debug.exe загружает этот файл и выводит приглашение debug .

Чтобы загрузить содержимое 109 (6Dh) секторов диска C, начиная с логического сектора 15 (0Fh), в область памяти, начиная с адреса 04BA:0100, введите следующую команду:

l04ba:100 2 0f 6d

Debug: m (move)

Копирование содержимого одного блока памяти в другой.

Синтаксис

m диапазон адрес

Параметры

диапазон Обязательный параметр. Задание начального и конечного адреса или начального адреса и длины области памяти, содержимое которой требуется скопировать. адрес Обязательный параметр. Задание начального адреса области памяти, в которую требуется скопировать содержимое диапазона . ? Вывод списка подкоманд debug .

Примечания

  • Задание правильных записей диапазона

    Параметр диапазон используется в подкомандах debug для задания диапазона памяти. Параметр диапазон можно задать в одном из следующих форматов: начальный адрес и конечный адрес или начальный адрес и длина (обозначаемая l ) диапазона. Например, оба следующих выражения задают диапазон из 16 байтов, начинающийся с адреса CS:100:

  • Задание правильных записей адреса

    Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a , g , l , t , u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

  • Копирование данных

    Если адреса в копируемом блоке памяти заданы так, что в этот блок не записываются новые данные, то информация в этом блоке не изменяется. Если же операция копирования является перекрывающей, перекрывающиеся данные перезаписываются. (Операция копирования является перекрывающей, если два блока памяти имеют общую часть).

  • Перекрывающееся копирование двух областей памяти

    Подкоманда m выполняет перекрывающее копирование без потери данных в области назначения. Содержимое адресов, которые будут перезаписаны, копируется в первую очередь. Если данные копируются из старших адресов в младшие адреса, операция копирования начинается с младшего адреса исходного блока и продолжается в направлении старшего адреса. И наоборот, если данные копируются из младших адресов в старшие, копирование начинается со старших адресов исходного блока и продолжается в направлении младшего адреса.

Примеры

Чтобы скопировать содержимое адресов с CS:110 по CS:510, а затем с CS:10F по CS:50F и так далее, пока все содержимое адресов с CS:100 по CS:500 не будет скопировано, введите следующую команду:

mcs:100 110 cs:500

Чтобы просмотреть результаты, воспользуйтесь подкомандой d (dump), указав адреса, заданные в подкоманде m .

Debug: n (name)

Задание имени исполняемого файла для команд debug l (load) или w (write) или задание параметров для отлаживаемого исполняемого файла. Выполненная без параметров подкоманда n очищает текущие значения.

Синтаксис

n [путь ][исполняемый_файл ]

n [параметры_файла ]

Параметры

[путь ][исполняемый_файл Задание расположения и имени исполняемого файла для тестирования. [параметры_файла ] Задание параметров и ключей командной строки для тестируемого исполняемого файла. ? Вывод списка подкоманд debug .

Примечания

  • Использование подкоманды n

    Подкоманду n можно использовать двумя способами. Во-первых, для задания имени файла для последующих подкоманд l (load) или w (write). Если программа Debug.exe вызвана без задания имени файла для отладки, команда n имя_файла должна быть вызвана перед использованием команды l для загрузки файла. Имя файла форматируется соответствующим образом для контрольного блока файла (FCB) по адресу CS:5C. Во-вторых, подкоманда n может использоваться для задания параметров и ключей командной строки отлаживаемого файла.

  • Области памяти

    В следующей таблице перечислены четыре области памяти, которые используются командой n .

    Первое имя файла, задаваемое командой n , размещается в блоке управления файлом по адресу CS:5C. Если задано второе имя, оно помещается в блок управления файлом по адресу CS:6C. Количество символов в командной строке команды n (кроме первого символа, n ) сохраняется по адресу CS:80. Собственно командная строка n (снова без символа n ) сохраняется, начиная с адреса CS:81. Эти символы могут быть любыми параметрами и разделителями, которые допустимо вводить с командной строки в Windows 2000.

Примеры

В этом примере запускается команда debug и загружается программа Prog.com для отладки. Чтобы указать два параметра для программы Prog.com и запустить эту программу, введите следующую команду:

debug prog.com
nparam1 param2
g

В этом случае подкоманда g (go) запускает программу так, как если бы она была запущена с командной строки в виде:

prog param1 param2

При тестировании и отладке создается среда времени исполнения для программы Prog.com.

В следующей последовательности команд первая подкоманда n задает имя файла File1.exe для последующей подкоманды l (load), которая загружает файл File1.exe в память. Вторая подкоманда n задает параметры для файла File1.exe. Наконец, подкоманда g запускает File1.exe так, как если бы с командной строки было бы введено File1 File2.dat File2.dat .

nfile1.exe
l
nfile2.dat file3.dat
g

После команды l во втором экземпляре команда n не используется. Если подкоманда w (write) используется во втором экземпляре подкоманды n , файл File1.exe (т. е. отлаживаемый) сохраняется под именем File2.dat. Чтобы этого не произошло, всегда вызывайте команду l или w сразу же после команды n в первой форме.

Debug: o (output)

Вывод байта в порт вывода.

Синтаксис

o порт байт

Параметры

порт Обязательный параметр. Задание адреса порта вывода. Адрес порта может быть 16-битным значением. байт Обязательный параметр. Задание значения байта, выводимого в порт . ? Вывод списка подкоманд debug .

Примеры

Чтобы отправить байт 4Fh в порт вывода по адресу 2F8h, введите следующую команду:

Debug: p (proceed)

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

Синтаксис

p [= адрес ] [число ]

Параметры

адрес Задание адреса инструкции, которая будет выполнена первой. Если адрес не указан, по умолчанию выполнение начнется с инструкции, задаваемой регистрами CS:IP. число Задание количества инструкций, которые будут выполнены перед возвратом управления программе Debug.exe. По умолчанию используется значение 1. ? Вывод списка подкоманд debug .

Примечания

  • Задание правильных записей адреса

    Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a , g , l , t , u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

  • Использование параметра адрес

    Если в параметре адрес не указан сегмент, Debug.exe использует регистр CS тестируемой программы. Если параметр адрес опущен, выполнение программы начинается с адреса, указываемого регистрами CS:IP. Чтобы отличить параметр адрес от параметра число , перед адресом обязательно должен быть введен знак равенства (=). В случае если инструкция по заданному адресу не является циклом, строковой инструкцией, программным прерыванием или процедурой, подкоманда p работает также, как подкоманда t (trace).

  • Передача управления тестируемой программе

    Если в программе Debug.exe управление передано тестируемой программе с помощью команды p , выполнение продолжается до тех пор, пока цикл, строковая инструкция, программное прерывание или процедура не будут закончены или пока не будет выполнено заданное количество инструкций. Затем управление возвращается к Debug.exe.

  • Просмотр сообщений

    После запуска подкоманды p Debug.exe выводит на экран содержимое регистров, флаги состояния и следующую инструкцию в деассемблированном виде.

    Предупреждение!

    • Подкоманда p не может быть использована для отладки инструкций, содержащихся в ПЗУ.

Примеры

В этом примере тестируемая программа содержит инструкцию call по адресу CS:143F. Чтобы выполнить процедуру, указанную в call , и возвратиться в программу Debug.exe, введите следующую команду:

Результаты программы Debug.exe будут выведены в следующем формате:

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC
2246:1442 7505 JNZ 144A

Debug: q (quit)

Окончание работы программы Debug.exe без сохранения тестируемого файла и возврат в командную строку.

Синтаксис

Параметры

? Вывод списка подкоманд debug .

Debug: r (register)

Редактирование содержимого одного или нескольких регистров ЦПУ. Выполненная без параметров команда r выводит содержимое всех регистров и флагов из временного хранилище регистра, состояния всех флагов и декодированную инструкцию в текущей области.

Синтаксис

r [регистр ]

Параметры

регистр Задание имени регистра, содержащего сведения, которые требуется вывести на экран. ? Вывод списка подкоманд debug .

Примечания

  • Использование подкоманды r

    Если задан регистр, Debug.exe выводит на экран его 16-разрядное значение в шестнадцатеричном формате и двоеточие в качестве приглашения. Если требуется изменить значение содержащееся в регистре, введите новое значение и нажмите клавишу ENTER. В противном случае нажмите клавишу ENTER для возврата к приглашению программы debug .

  • Допустимые регистры x86

    В следующей таблице перечислены допустимые регистры x86 для параметра регистр .

    Значение
    ax
    bp
    bx
    cs
    cx
    di
    ds
    dx
    es
    f
    ip
    pc
    si
    sp
    ss

    Если задан недопустимый регистр, выводится следующее сообщение:

    Ошибка: br

  • Использование f вместо регистра

    Если указать f вместо регистра, Debug.exe выводит на экран текущее значение каждого флага состояния в виде двухбуквенного кода и приглашение debug . Для изменения значения флага введите соответствующий двухбуквенный код, воспользовавшись следующей таблицей.

    Новые значения флагов могут быть введены в любой последовательности. Между этими значениями не нужно вводить пробел. Чтобы завершить выполнение подкоманды r , нажмите клавишу ENTER. Флаги, новые значения для которых не вводились, останутся неизмененными.

  • Сообщения подкоманды r

    При задании более одного значения для флага выводится следующее сообщение:

    Ошибка: df

    При вводе кода, не содержащегося в таблице, выводится следующее сообщение:

    Ошибка: bf

    В обоих случаях Debug.exe пропустит все значения, следующие после неверного ввода.

  • Значения, используемые по умолчанию в программе Debug.exe

    Когда запускается программа Debug.exe, сегментный регистр указывает на нижнюю границу свободной памяти, указатель инструкций устанавливается равным 0100h, все флаги состояния очищаются, оставшиеся регистры обнуляются, за исключением sp , который устанавливается равным FFEEh.

Примеры

Если текущее положение указателя инструкций равно CS:11A, выводятся следующие сведения:



04BA:011A CD21 INT 21

Чтобы просмотреть только состояния флагов, введите следующую команду:

NV UP DI NG NZ AC PE NC - _

Введите одно и несколько допустимых значений флагов с пробелами или без них. Например:

nv up di ng nz ac pe nc - pleicy

Debug.exe завершит выполнение подкоманды r и выведет приглашение debug . Для просмотра изменений воспользуйтесь командой r или rf . Программа Debug.exe выводит следующие сведения:

NV UP EI PL NZ AC PE CY - _

Нажмите клавишу ENTER для возврата к приглашению программы debug .

Debug: t (trace)

Выполнение одной инструкции с выводом содержимого регистров, флагов состояния и декодированной формы выполняемой инструкции. При запуске подкоманды t без параметров выполнение начинается с адреса, указанного в регистрах CS:IP программы.

Синтаксис

t [= адрес ] [число ]

Параметры

адрес Задание адреса, с которого Debug.exe начнет выполнение инструкций. число Указывает число инструкций для выполнения. Указанное значение должно быть шестнадцатеричным числом. По умолчанию значение равно 1. ? Вывод списка подкоманд debug .

Примечания

  • Задание правильных записей адреса

    Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a , g , l , t , u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

  • Трассировка инструкций, записанных в ПЗУ

    Подкоманда t использует аппаратный режим трассировки микропроцессоров 8086 и 8088. Следовательно, также можно трассировать инструкции, хранимые в ПЗУ.

Примеры

Если текущая позиция указателя кода является 04BA:011A, Debug.exe выведет следующие сведения:

AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21

Debug: u (unassemble)

Деассемблирование байтов и просмотр соответствующего исходного кода, включая адреса и двоичные значения. Деассемблированный код выводится в формате, похожем на распечатку ассемблерного файла. Выполненная без параметров подкоманда u деассемблирует 20h байт (значение по умолчанию), начиная с первого адреса после адреса, использованного в предыдущей подкоманде u .

Синтаксис

u [диапазон ]

Параметры

диапазон Задание начального и конечного адреса или начального адреса и длины участка двоичного кода, который требуется деассемблировать. ? Вывод списка подкоманд debug .

Примечания

  • Задание правильных записей диапазона

    Параметр диапазон используется в подкомандах debug для задания диапазона памяти. Параметр диапазон можно задать в одном из следующих форматов: начальный адрес и конечный адрес или начальный адрес и длина (обозначаемая l ) диапазона. Например, оба следующих выражения задают диапазон из 16 байтов, начинающийся с адреса CS:100:

Примеры

Чтобы деассемблировать 16 (10h) байт, начиная с адреса 04BA:0100, введите следующую команду:

Результаты программы Debug.exe выводятся в следующем формате:


04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B

04BA:0109 65 DB 65
04BA:010A 63 DB 63
04BA:010B 69 DB 69
04BA:010C 66 DB 66
04BA:010D 69 DB 69
04BA:010E 63 DB 63
04BA:010F 61 DB 61

Чтобы просмотреть сведения только об адресах с 04BA:0100 по 04BA:0108, введите следующую команду:

Программа Debug.exe выводит следующие сведения:

04BA:0100 206472 AND ,AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370 AND ,DH

Debug: w (write)

Запись файла или определенных секторов на диск. При запуске подкоманды w без параметров запись начинается с адреса CS:100.

Синтаксис

w [адрес ]

w [адрес ] [диск ] [первый_сектор ] [ число ]

Параметры

адрес Задание начального адреса файла или части файла, которые требуется записать на диск. диск Задание дисковода, содержащего диск назначения. Данный параметр задается числом: 0 = A, 1 = B, 2 = C и т. д. первый_сектор Задание шестнадцатеричного адреса первого сектора для записи. число Задание количества секторов, которые требуется записать. ? Вывод списка подкоманд debug .

Примечания

  • Для записи количества байт, заданного в регистрах BX:CX, в файл на диске используется следующий синтаксис команды:

    w [адрес ]

  • Для пропуска файловой системы и прямой записи указанных секторов используется следующий синтаксис команды:

    w [адрес ] [диск ] [первый_сектор ] [ число ]

  • Задание правильных записей адреса

    Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a , g , l , t , u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

  • Имя файла на диске нужно задать при запуске программы Debug.exe или в последней вызванной подкоманде n (name). Оба эти метода правильно форматируют имя файла для блока управления файлом (FCB) по адресу CS:5C.
  • Сброс значений регистров BX:CX перед использованием команды w без параметров.

    Если используются подкоманды g (go), t (trace), p (proceed) или r (register), перед использованием команды w без параметров значения регистров BX:CX необходимо сбросить.

  • Запись измененного файла на диск

    Если файл был изменен, но имя, размер и начальный адрес не менялись, Debug.exe позволяет записать файл в его исходное расположение на диске.

  • Запись файлов.exe или.hex

    Файлы с расширениями.exe и.hex нельзя записать с помощью этой команды.

    Предупреждение

    • Непосредственная запись в сектор диска является исключительно опасной, так как в этом случае не выполняется дескриптор файла Windows XP. Логическая структура диска может быть повреждена при вводе неверного значения.

Примеры

Чтобы записать содержимое области памяти, начиная с адреса CS:100, на диск B и собрать данные из 2Bh секторов, начиная с логического сектора диска под номером 37h, введите следующую команду:

После окончания операции записи выводится приглашение программы debug .

Debug: xa (allocate expanded memory)

Выделение заданного количества страниц памяти EMS. Выполненная без параметров подкоманда xa

Синтаксис

xa [число_страниц ]

Параметры

число_страниц Задание числа выделяемых страниц памяти EMS. Размер страницы составляет 16 килобайт. ? Вывод списка подкоманд debug .

Примечания

  • Если запрашиваемое количество страниц доступно, Debug.exe выводит сообщение о шестнадцатеричном номере созданного дескриптора. В противном случае выводится сообщение об ошибке.

Примеры

Чтобы выделить восемь страниц дополнительной памяти, введите следующую команду:

Если команда успешно выделит память, выводятся следующие сведения:

Создан дескриптор=0003

Debug: xd (deallocate expanded memory)

Освобождение дескриптора памяти EMS. Выполненная без параметров подкоманда xd проверяет наличие или отсутствие поддержки дополнительной памяти (EMS).

Синтаксис

xd [дескриптор ]

Параметры

дескриптор Задание освобождаемого дескриптора. ? Вывод списка подкоманд debug .

Примечания

  • Система Windows XP не поддерживает память EMS. Для использования памяти EMS на компьютере должен быть установлен драйвер памяти EMS, поддерживающий версию 4.0 спецификации Lotus/Intel/Microsoft Expanded Memory Specification (LIM EMS).

Примеры

Чтобы освободить дескриптор 0003, введите следующую команду:

Дескриптор 0003 освобожден

Debug: xm (мар expanded memory pages)

Отображение логической страницы памяти EMS, соответствующей заданному дескриптору, в физическую страницу памяти EMS. Выполненная без параметров подкоманда xm проверяет наличие или отсутствие поддержки памяти EMS.

Синтаксис

xm [лог_страница ] [физ_страница ] [ дескриптор ]

Параметры

лог_страница Задание номера логической страницы памяти EMS, которая будет отображена в физическую страницу физ_страница . физ_страница Задание номера физической страницы памяти EMS, в которую будет отображена логическая страница лог_страница . дескриптор Задание дескриптора. ? Вывод списка подкоманд debug .

Примечания

  • Система Windows XP не поддерживает память EMS. Для использования памяти EMS на компьютере должен быть установлен драйвер памяти EMS, поддерживающий версию 4.0 спецификации Lotus/Intel/Microsoft Expanded Memory Specification (LIM EMS).

Примеры

Чтобы отобразить логическую страницу 5 дескриптора 0003 в физическую страницу 2, введите следующую команду:

При успешном выполнении программы Debug.exe будет выведено сообщение:

Логическая страница 05 отображена на физическую страницу 02

Debug: xs (display expanded memory status)

Вывод сведений о состоянии памяти EMS.

Синтаксис

Параметры

? Вывод списка подкоманд debug .

Примечания

  • Для использования памяти EMS на компьютере должен быть установлен драйвер памяти EMS, поддерживающий версию 4.0 спецификации Lotus/Intel/Microsoft Expanded Memory Specification (LIM EMS).
  • Результаты программы Debug.exe выводятся в следующем формате:

    Для дескриптора xx выделено xx страниц
    Физическая страница xx = Сегмент EMS xx
    Выделено xx из xx страниц EMS
    Выделено xx из xx дескрипторов EMS

Примеры

Чтобы вывести сведения о состоянии памяти EMS, введите следующую команду:

Подкоманда xs выводит сведения в следующем виде:

Handle 0000 has 0000 pages allocated Для дескриптора 0001 выделено 0002 страниц Физическая страница 00 = Сегмент EMS C000 Физическая страница 01 = Сегмент EMS C400 Физическая страница 02 = Сегмент EMS C800 Физическая страница 03 = Сегмент EMS CC00 Выделено 2 из 80 страниц EMS Выделено 2 из FF дескрипторов EMS

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

DEBUG . EXE – специальная системная программа для ввода и пошагового выполнения программ, написанных на машинном языке или с помощью команд ассемблера.

Для запуска этой программы нажмите кнопку Пуск , затем Выполнить , введите Debug и нажмите ввод , в результате программа должна загрузиться с диска в память.

После окончания загрузки на экране появится приглашение в виде дефиса, что свидетельствует о готовности программы Debug для приема команд.

Наиболее часто используемые инструкции Debug :

1. Q – выход из программы.

2. ? – получение справки.

3. H (Hexarithmetic) – шестнадцатеричная арифметика. Если после символа Н набрать 2 числа (размером не более 4 цифр каждое) через пробел, то получим сумму и разность набранных чисел:

4. R [<имя регистра>] – работа с регистрами (от слова Register). Инструкция «R» без параметра позволяет просмотреть содержимое всех регистров, а также значение флагов и команду, расположенную по смещению 0100 в сегменте кода. Обычно по смещению 0100 находится первая команда программы.

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

Как видим, при первом просмотре регистров командой r, в регистре АХ был 0, затем содержимое регистра было изменено.

5. U [<сегментный регистр>:]<начальный адрес>, <конечный адрес> – просмотр ячеек оперативной памяти, начиная с указанного смещения в сегменте, заданном сегментным регистром. Команда U (Unassemble) дизассемблирует команды, находящиеся в памяти по заданному адресу.

Например, в следующем примере мы просматриваем команды, находящиеся в регистре CS, начиная с адреса 100, по адрес 102.

6. Е [<сегментный регистр>:]<смещение> – запись информации в ячейки оперативной памяти.

Как было сказано, с помощью Debug можно вводить команды как на машинном языке, так и на языке ассемблера. Инструкция Debug E (Enter) служит для ввода команд на машинном языке . Здесь Debug используется как интерпретатор, чтобы работать непосредственно с микропроцессором. Можно задавать машинные команды, записывать их в определенное место оперативной памяти, обычно, начиная с 0100 смещения относительно начала сегмента кода. Затем выполнять пошагово (по одной команде) либо сразу всю программу.

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

Например, команда для сложения значений из регистров АХ и ВХ двухбайтовая и имеет машинный код 01D8.

Инструкция “E <смещение>” при работе распечатывает в следующей после ее ввода строке адрес, состоящий из двух чисел, и старое значение байта по этому адресу: <содержимое CS>:<смещение><значение байта>, далее компьютер ожидает ввода нового значения байта.

Для ввода, например, двухбайтовой машинной команды 01D8 нужно записать 01 в сегмент кода по смещению 100, и D8 – по смещению 101:

7. Т (от Tracing)– запуск программы, находящейся в оперативной памяти по адресу 0100, в пошаговом режиме. Для вызова программы на выполнение нужно предварительно позаботиться, чтобы в регистре IP (счетчик команд) было число 0100.

8. А <смещение> – ввод команд в ассемблерном виде (от Assemble). Первую команду программы следует начинать вводить со смещения 0100. Далее система ждет поочередного ввода команд ассемблера. Для окончания ввода нужно нажать Enter после пустой строки.

Пример . Введем в оперативную память программу на ассемблере, выполняющую сложение двух чисел. Установим начальный адрес следующим образом: A 0100 .

Отладчик выдаст значение адреса сегмента кодов и смещения в виде хххх:0100. Теперь можно вводить каждую команду, завершая клавишей Ввод.

Прежде чем выполнить программу, проверим сгенерированные машинные коды при помощи команды U. Необходимо сообщить отладчику адреса первой и последней команд, которые необходимо просмотреть, в данном случае 0100 и 0106. Введите: U 100, 106

Как видим, машинные коды сгенерированы верно.

С помощью команды R выведем содержимое регистров и первую команду нашей программы:

С помощью команд Т выполним последовательно все команды программы:

Так вводятся и трассируются программы на языке ассемблера.

Изучим остальные команды Debug, после чего вернемся к примеру.

9. G (от Go) – запуск программы, находящейся в оперативной памяти по адресу 0100. Для вызова программы на выполнение нужно предварительно позаботиться, чтобы в регистре IP (счетчик команд) было число 0100.

10. N <имя.com-файла> – задает имя программы (Name) для последующей записи ее на диск либо считывания с диска. Перед записью предварительно нужно записать 0 в регистр ВХ, а размер программы (в байтах) – в регистр СХ.

11. W (от Write) – запись программы на диск. После выполнения инструкции “W” на диске в текущей директории появится файл с расширением.COM – точная копия веденной программы.

программы с диска в оперативную память. Предварительно имя программы задается с помощью команды N.

Вернемся к примеру со сложением двух чисел. Чтобы записать эту программу на диск, следует выполнить три действия:

1. присвоить программе имя;

2. указать длину программы;

3. выполнить запись.

1. Присвоим будущему файлу имя с помощью команды N.

2. Программа состоит из четырех двухбайтных инструкций, занимает адреса со смещениями с 0100 по 0106, значит ее длина – 8 байт. Размер программы Debug хранит в регистровой паре . В нашем случае значение длины умещается в одном регистре, поэтому старший регистр пары мы просто обнулим: BX=0, CX=8.

3. Для записи программы на диск используем программу W.

С помощью ярлыка, помещенного на рабочий стол, щелкните его правой кнопкой мыши и выберите пункт «Свойства» в выпавшем контекстном меню. На вкладке «Ярлык» в окне, которое откроется в результате этого действия, кликните поле «Объект». Затем нажмите клавишу End, чтобы переместить курсор в самый конец строки, введите пробел и наберите нужный ключ (-debug). После этого нажмите кнопку «OK» для сохранения ярлыка с внесенными изменениями и запускайте игру обычным способом - двойным щелчком по этой иконке.

Раскройте главное меню на кнопке «Пуск» и выберите пункт «Выполнить» - таким способом вы откроете стандартное окно запуска программ. Этому действию соответствует нажатие сочетания горячих клавиш Win+R - можно использовать и его. Затем введите в открывшемся окне полный путь к исполняемому файлу программы. Набирать его вручную не обязательно, можно нажать кнопку «Обзор» и найти исполняемый файл игры на диске вашего компьютера. После этого добавьте через пробел ключ -debug и нажмите кнопку «OK». При следующем запуске с помощью этого диалога набирать повторно путь и ключ не потребуется - введенная строка сохранится в выпадающем списке, откуда ее можно будет выбрать.

Создайте текстовый файл в любой папке вашего компьютера. Можно сделать это на рабочем столе - щелкните фоновое изображение правой кнопкой мыши, во всплывшем контекстном меню раскройте раздел «Создать» и выберите пункт «Текстовый документ». Введите в первой строке документа полный путь к исполняемому файлу игры - его можно скопировать в ярлыке программы или в адресной строке Проводника. Добавьте через пробел ключ -debug и сохраните документ с расширением bat. Запускать игру надо двойным щелчком по этому файлу.

Не все старые игры и программы могут работать в новых операционных системах и с высоким разрешением экрана. В Windows можно настроить параметры совместимости, и приложение будет запущено. О том, как это сделать, читайте ниже.

Инструкция

Щелкните правой кнопкой мыши по ярлыку игры. В выпавшем меню выберите пункт «Свойства».

В открывшемся окне перейдите на вкладку «Совместимость».

Нажмите «Ок».

Видео по теме

Читерские программы придуманы для того, чтобы упростить компьютерную игру. При помощи чит-кодов вы сможете получать дополнительные бонусы и способности для своего компьютерного героя.

Вам понадобится

  • - программа "CheMax";

Инструкция

Читы для игры Казаки
В стратегии «Казаки» меню для ввода чит-кодов открывается при нажатии клавиши «Enter»
supervizor - туман сражения вкл/выкл
money – пополнения
multitvar – доступ ко всем солдатам
Gods - помощь богов
AI - возможность контролировать врагов
resources - пополнить все ресурсы
shield – супер оружие

Читы для игры Sims 3
Чтобы ввести коды в игре Sims 3, нажмите комбинацию горячих клавиш CTRL + SHIFT + С. Если не открылась, то сверните игру и проверьте, не открылась ли при нажатии этих клавиш другая программа. Закройте ее и разверните игру. Повторно нажмите клавиши.
Для пользователей операционной системы Vista: используйте клавиши Ctrl+Windows+Shift+C.
Некоторые коды для Sims 3:
Kaching - добавляет §1.000 в семейную копилку
Motherlode - добавляет §50.000 симолеонов к семейному бюджету
Familyfunds - позволяет установить бюджет .

Читы для игры Counter-Strike 1.6
Это одна из самых популярных -игр . К данной компьютерной игре хакеры придумали множество чит-программ. Скачайте BadBoy v 5.2. Это универсальный чит, включающий в себя все предыдущие его версии. Установите программу в корневую папку cstrike. Запустите игру и нажмите клавишу “Insert”. Откроется меню данной программы. Клавишами “Page Up” и “Page down” выбирайте необходимые вам настройки и играйте. Данный чит позволяет видеть сквозь стены, быстро бегать, точно стрелять. Но за эту программу на онлайн-серверах блокируют.

Читы для игры Дальнобойщики 2
Во время игры нажмите на клавиатуре клавишу «Pause/Break» и введите необходимый вам чит-код.
SLFILLUP – вы получите полный бак топлива.
SLRECOVER – в службу спасения без затраты средств.
SLREPAIR – бесплатный ремонт автомобиля.

Видео по теме

Обратите внимание

За данные чит-коды, вы можете получить бан на онлайн-серверах

Текстовые игры – один из излюбленных способов проведения досуга у молодежи, увлекающейся ролевыми играми. Ведь для того, чтобы поиграть за любимого персонажа, не нужно готовить костюм и ехать в лес. Играть в форумную игру можно дома, на работе или в перерывах между парами, в общем, когда вам удобно.

Инструкция

Итак, вы решили создать свою текстовую игру и вскоре станете администратором своего ролевого мира. Для начала вам было бы неплохо найти себе одного – двух помощников, так как работы предстоит достаточно.

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

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

Сочините правила форума и шаблон анкеты. Правила различных текстовых игр весьма похожи, вы можете посмотреть их на любом игровом форуме и, взяв их за основу, написать свои. В же необходимо создать перечень вопросов, на которые должны ответить игроки, подающие заявку на роль персонажа. Обычно в анкете–заявке пишут имя, расу и возраст персонажа, описывают внешность, характер и умения. Лучше всего, если вместе с анкетой вы вывесите заполнения.

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

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

Видео по теме

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

Вам понадобится

  • ОС Windows.

Инструкция

Воспользуйтесь «Проводником», если надо найти полный путь к файлу в операционной системе Windows. Откройте программу с помощью «горячих клавиш» Win + E или выбором пункта «Компьютер» в главном меню, вызываемом щелчком по кнопке «Пуск». Если вам известно что-либо о месте расположения нужного объекта, переместитесь по дереву каталогов как можно ближе к нему - это сузит диапазон поиска, а значит, и время на эту процедуру.

В поле, расположенном правее адресной строки менеджера файлов, введите название файла и дождитесь, пока программа просмотрит все вложенные каталоги и найдет объекты, в именах которых есть что-либо похожее. Полный путь будет помещен в колонку «Путь к папке» таблицы с результатами поиска. Переписывать его вручную нет необходимости - кликните эту строку правой кнопкой мыши, в выпавшем контекстном меню выберите строку «Свойства» и скопируйте содержимое поля «Расположение» открывшегося окна.

Если по какой-либо причине вы вынуждены пользоваться интерфейсом командной строки, задействуйте DOS-команду where. Ей нужно задать параметр R, чтобы сделать поиск файла рекурсивным, то есть, чтобы просматривались все вложенные папки. Кроме него обязательно укажите название нужного файла, а необязательным параметром может быть известная вам часть пути к нему. Эта команда тоже осуществляет поиск, поэтому указав хотя бы часть пути, вы сократите затраченное на нее время. Например, если необходимо получить полный путь к файлу с названием RM.csv, о котором известно лишь, что он находится на диске F, команда должна быть написана так:where /R f: RM.csv

Набрав команду и ее параметры, нажмите Enter и по окончании поиска найдете полный путь в следующей строке интерфейса. К сожалению, выделить и скопировать только эту строку здесь нельзя, поэтому кликните правой кнопкой в любом месте окна, выберите в меню команду «Выделить все», а затем нажмите Enter. Таким способом вы поместите в буфер обмена все содержимое интерфейса командной строки, которое в каком-либо текстовом редакторе можно очистить от лишних строк.

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

Вам понадобится

  • - права администратора на целевой машине.

Инструкция

Запустите командный процессор cmd. Кликните по кнопке «Пуск» в панели задач. Кликните по пункту «Выполнить...» появившегося меню. В текстовое поле диалога «Запуск программы» введите строку cmd и нажмите кнопку OK.

Создайте резервную копию файла boot.ini. Узнайте путь инсталляции текущей копии Windows при помощи команды:echo %SystemRoot%Перейдите на тот диск, куда установлена операционная система при помощи ввода литеры устройства с последующим двоеточием. Перейдите в его корневой каталог, используя команду cd. Снимите атрибуты «системный», «только для чтения» и «скрытый» с файла boot.ini при помощи команды attrib, создайте резервную копию командой copy и снова установите атрибуты:attrib -h -s -r boot.inicopy boot.ini boot.ini.oldattrib +h +s +r boot.ini

Выведите текущий список вариантов загрузки. Используйте команду:bootcfg /queryПросмотрите элементы списка и определите тот, на основе которого будет создана новая конфигурация с возможностью отладки в режиме ядра . Запомните идентификатор загрузочной записи.

Создайте новую загрузочную запись, исполнив команду bootcfg с параметром /copy. Используйте параметр /id для указания идентификатора записи, которая будет скопирована. При помощи параметра /d задайте отображаемое имя записи. Например:bootcfg /copy /id 1 /d "Win XP (Debug)"Снова выведите список вариантов загрузки командой bootcfg с параметром /query и узнайте идентификатор добавленной записи.

Включите опции для запуска отладчик а ядра в загрузочную запись, созданную на предыдущем шаге. Если отладка будет производиться на целевой машине, просто добавьте опцию /debug. Например:bootcfg /debug on /id 2Если планируется удаленная отладка с подключением целевого компьютера к хост-машине через com-порт, дополнительно используйте опции /port /baud для указания номера порта и скорости обмена соответственно:bootcfg /debug on /port COM2 /baud 9600 /id 2Если удаленная отладка будет осуществляться с подключением через интерфейс IEEE 1394 (кабель FireWire), воспользуйтесь опцией /dbg1394 для включения соответствующего режима и опцией /ch для указания номера канала, например:bootcfg /dbg1394 on /ch 42 /id 2Просмотрите загрузочные записи командой bootcfg с параметром /query и убедитесь в том, что изменения внесены. Закройте окно командного процессора, выполнив команду exit.

Привет, юный хакер! Ты уже многое знаешь, но крутой хакер никогда не останавливается на достигнутом. Эта статья посвящена работе с стандартным дебаггером системы ДОС. Ты скажешь: «На кой фиг мне это надо мне, крутому перцу?».
Представь ситуацию: ты приходишь в компьютерный клуб (интернет-кафе, к другу домой), а там на тачке дисководы сняты, сидюки заклеены, а пакость сделать все же хочется. Естественно, на любом «нормальном» компе нет никаких компиляторов С, ассемблеров… но почти на каждом «нормальном» компе есть ДОС! Да, именно ДОС, и его последователи — Винды всех типов а конкретнее программа
DEBUG.

Как? Набрать короткую (если времени мало, да и сил жалко), но неприятную программку, сохранить ее на диске и потом запустить, получив моральное удовлетворение. Посмотрим, как это делается, но для начала изучим несколько простых, но весьма полезных команд.

Итак, вы запустили программу DEBUG

Первая команда –D (dump) .

Эта команда позволяет просмотреть некоторую область памяти, адрес которой задан в параметре в формате сегмент:смещение.

Для начала посмотрим ПЗУ BIOS:

Здесь вы видите фирму-производителя вашей
BIOS. А по адресу:

получаем интересную информацию о системе,
такую как дата создания БИОС, чипсет… А по данному адресу
(0000:046C) находится таймер БИОС. Отчетливо видно, что значения все время меняются.
Для программиста удобно просматривать сегменты команд, данных и стека (CS, DS и SS, соответственно).

Выше мы видим содержимое сегмента данных, т. е.
значения определенных переменных.

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

Еще одна важная команда -R (register) , позволяющая просматривать состояние конкретного регистра и изменять его состояние или же сразу перейти к первой выполняемой команде с просмотром всех регистров.

AX 1203
: 0

В данном фрагменте мы просматриваем регистр АХ и очищаем его (пишем в него 0).
Чтобы перейти к первой выполняемой команде (по адресу CS:100):

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000
SI=0000 DI=0000
DS=3B9A ES=3B9A SS=3B9A CS=3B9A IP=0100 NV UP EI PL NZ NA PO NC
3B9A:0100 E82421 CALL 2227

Третья команда –E (enter) Addres .

Предназначена она для изменения значений в
памяти – с помощью нее можно уже вводить команды в машинных кодах. Замечание: при вводе данных сначала пишется младший байт
(по младшему адресу), затем – старший (по старшему), т. е.
чтобы записать по адресу DS:0000 число 1234h необходимо ввести:

E DS:0000 34 12

Например введем следующее:

E cs:100 B8 34 12
-D CS:100

А с помощью команды U (unassemble) , дизассемблируем введенные команды и получим:
-U CS:100,102
3B9A:0100 B83412 MOV AX,1234

Таким же образом можно дизассемблировать любой участок памяти, что очень полезно.
Но вместо ввода команд на машинном языке, можно воспользоваться встроенным
ассемблером программы DEBUG. Для этого существует команда
-A (assemble) . С помощью этой команды вы можете написать уже нормальную программку на ассемблере, выполняющую необходимые действия.:

A
0B3B:0100 mov ax,1234
0B3B:0103 mov ah, 4c
0B3B:0105 int 21
0B3B:0107

Затем в регистр СХ необходимо поместить размер программы в байтах. Он будет равен разности конечного и начального смещений. Теперь остается только осуществить запись на диск командой W и в результате увидеть записанное количество байтов. В итоге мы получаем программу, готовую к исполнению. Выход осуществляется командой q. Пример:

A
0B3B:0100 mov ax,1234
0B3B:0103 mov ah, 4c
0B3B:0105 int 21
0B3B:0107
-u CS:100, 106
0B3B:0103 B44C MOV AH,4C
0B3B:0105 CD21 INT 21
-r cx
CX 0000
:7
-r
AX=0000 BX=0000 CX=0007 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B3B ES=0B3B SS=0B3B CS=0B3B IP=0100 NV UP EI PL NZ NA PO NC
0B3B:0100 B83412 MOV AX,1234
-N my.com
-W
Запись 00007 байт
-q

В заключение можно сказать, что данный способ создания программ открывает новые возможности для любителей компьютерных пакостей, приколов, да и просто программистов-любителей – ведь теперь для создания небольших программ, вместо установки компиляторов, можно воспользоваться стандартными средствами системы, а DEBUG входит в поставку во все Винды вплоть до ХР. Я думаю, что это поможет вам веселее провести время за чужим компом, вызывая истинное удивление хозяина (дисков и дискет-то вы не приносили!!!) новыми эффектами работы его оборудования. Успехов, юные любители хакерного экстрима!



Рекомендуем почитать

Наверх