Сайт о телевидении

Сайт о телевидении

» » Debug — что это? Описание инструмента. Работа с командной строкой Windows, Программа Debug и её использование

Debug — что это? Описание инструмента. Работа с командной строкой Windows, Программа Debug и её использование



Программа DEBUG (отладчик) дает средство обнаружения ошибок при
работе с программой, транслированной в машинный язык. Программа
DEBUG обеспечивает возможность пошагово выполнять программу и
следить за тем, что при этом происходит. Программа DEBUG - это еще
одно программное средство, поставляемое как часть DOS. Вы
загружаете ее так же, как и любую другую программу, и работаете в
диалоге, используя клавиатуру и экран. Когда программа DEBUG
ожидает каких-либо действий со стороны пользователя, то свой запрос
она обозначает символом "-".

Вместо перечисления всех команд, которые входят в программу
DEBUG, используем данный отладчик для проверки работы только что
составленной программы, приведенной на Фиг. 5.13 и П5.14. На
Фиг. 5.17 приведен соответствующий листинг.
В данном примере сначала вызывается программа DEBUG и
указывается та программа, которую предполагается отлаживать - в
нашем случае программа FIG5=13.EXE. После того, как программа DEBUG
загружена, она производит загрузку отлаживаемой программы.
Управление теперь принадлежит отладчику, и он с помощью символа "-"
показывает, что ожидает ввода. До тех пор, пока вы не введете для
него указаний, с программой ничего происходить не будет.

Команда R выводит содержимое всех регистров в момент,
соответствующий загрузке программы FIG5=13 и передаче ей управления.
Содержимое регистров не требует пояснений, за исключением, быть
может, значений флагов. Флаг NV указывает на отсутствие
переполнения, флаг UP - флаг направления и т.д. При выводе
содержимого регистров в последней строке приводится следующая
выполняемая команда. В ячейке 04C5:0000 записана команда PUSH DS.
B>A:DEBUG FIG5_13.EXE
-R

AX=0000 BX=0000 CX=0120 DX=0000 SP=FFF0 BP=0000 SI=0000 DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=2C26 IP=0000 NV UP DI PL NZ NA PO NC
2C26:0000 1E PUSH DS

2C26:0000 1E PUSH DS
2C26:0001 B80000 MOV AX,0000
2C26:0004 50 PUSH AX
2C26:0005 FC CLD
2C26:0006 8CC8 MOV AX,CS
2C26:0008 8ED8 MOV DS,AX
2C26:000A 8D361D00 LEA SI,
2C26:000E AC LODSB
2C26:000F A24000 MOV ,AL
2C26:0012 E82C00 CALL 0041
2C26:0015 803E40000A CMP ,0A
2C26:001A 75F2 JNZ 000E
2C26:001C CB RET Far
2C26:001D 9D POPF
2C26:001E E2A0 LOOP FFC0
2C26:0020 20AFE0AE AND ,CH
2C26:0024 A3E0A0 MOV ,AX

D2C26:0

2C0E:0000 CD 20 00 A0 00 9A EE FE 1D F0 ED 04 04 1C 3C 01 . ............<.
2C0E:0010 22 1B EB 04 22 1B 04 1C 01 01 01 00 02 06 FF FF "..."...........
2C0E:0020 FF FF FF FF FF FF FF FF FF FF FF FF 08 2C D0 FF .............,..
2C0E:0030 04 1C 14 00 18 00 0E 2C FF FF FF FF 00 00 00 00 .......,........
2C0E:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2C0E:0050 CD 21 CB 00 00 00 00 00 00 00 00 00 00 20 20 20 .!...........
2C0E:0060 20 20 20 20 20 20 20 20 00 00 00 00 00 20 20 20 .....
2C0E:0070 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 ........

RAX
AX 0000
:1234

E 2C0E:21
2C0E:0021 69. 73. 20. 61.20 20.


DS=2C26 ES=2C26 SS=2C26 CS=2C26 IP=003C NV UP DI PL NZ NA PO NC
2C26:003C CD10 INT 10
-T

AX=0E54 BX=0000 CX=003F DX=0000 SP=FFEA BP=0000 SI=001D DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=F000 IP=0165 NV UP DI PL NZ NA PO NC
F000:F065 FB STI
-T

Фиг. 5.17 Листинг отладчика для Фиг 5.13 и 4.14 (начало)
AX=0E54 BX=0000 CX=003F DX=0000 SP=FFEA BP=0000 SI=001D DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=F000 IP=0166 NV UP DI PL NZ NA PE NC
F000:F066 FC CLD
-G 2C26:3E

T
AX=0E54 BX=0000 CX=003F DX=0000 SP=FFEA BP=0000 SI=001D DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=2C26 IP=013E NV UP DI PL NZ NA PO NC
2C26:003E RET
-G

Эта программа - тест

Program terminated normally
-R

AX=0754 BX=0000 CX=003F DX=0000 SP=FFEA BP=0000 SI=001D DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=2C26 IP=003E NV UP DI PL NZ NA PO NC
2C26:003E C3 RET
-Q

Фиг. 5.17 Листинг отладчика для Фиг 5.13 и 4.14 (продолжение)

Здесь следует немного задержаться и проанализировать
информацию, которая записывается в регистры. Содержимое регистров
соответствует моменту, когда программа FIG5=13 получает управление
от командного процессора. Обратите внимание, что пара регистров
CS:IP указывает на первую команду, определяемую оператором END
программы. Регистры DS и ES указывают на префикс программного
сегмента. И наконец, пара регистров SS:SP указывает на сегмент
STACK. Описанное состояние регистров будет сравниваться позднее с
аналогичным состоянием регистров для файла типа.COM.

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

Однако у дизассемблирования с помощью программы DEBUG имеется
ряд недостатков по сравнению с использованием листинга. Отсутствуют
комментарии (может быть очень важные для понимания программы), и
ячейки памяти идентифицируются только по адресу, а не по имени
переменной. Например, хранящаяся в ячейке 04C5:000E команда имеет,
как показано на Фиг.5.13, следующий вид:

MOV OUTPUT_CHARACTER,AL

А в дизассемблированном виде

MOV ,AL

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

Кроме того, программа, DEBUG не обеспечивает той же самой
ассемблерной мнемоники, которую воспринимает ассемблер. Это значит,
что некоторые команды будут выглядеть по-разному. Команда из ячейки
04C5:0014 будет при дмзассемблировании иметь вид

CMP B,,0A

Но та же саммая команда на Фиг.5.13 представлена в виде:

CMP OUTPUT_CHARACTER,10

Программа дизассемблирования как на входе, так и на выходе
работает только с шестнадцатеричными значениями. Этим объясняется
появление значения 0A. Мы уже выяснили, почему получается значение
, вместо имени OUTPUT_CHARACTER. Что же такое символ "B,"?

Ассемблер оперирует переменными вполне определенного типа. Это
значит, что во время ассемблирования тип переменных может иметь
значение: байт, слово или какой-нибудь другой. Таким образом, когда
программист вводит команду, содержащую ссылку на область памяти, то
ассемблеру известен размер этой области. На программа DEBUG не
имеет представления о длине переменной, записанной по адресу
. Однако программе дизассемблирования точно известно, что
данная команда пересылает ровно один байт данных, указанных
непосредственно в команде, по адресу . Таким образом, символ
"B," указывает на то, что непосредственная операция состоит в
пересылке одного байта. Для получения того же самого результата с
помощью ассемблера соответствующая команда должна иметь вид:

CMP BYTE PTR ,10

Вы можете рассматривать символ "B," как сокращение BYTE PTR.
Аналогично символ W используется для WORD PTR,L - для длинного
(far) возврата и т.д.

Вместе с командой в дизассемблированном виде вводится и ее
объектный код. Как вы можете заметить, по адресу 04C5:001C записаны
какие-то команды, которых нет на Фиг. 5.13. Эта область данных,
содержащая строку "Это тест". Однако команде, осуществляющей
дизассемблирование, не известно, где в программе кончаются команды
и начинаются данные. Таким образом она все интерпретирует как
команды. (Кстати, именно эта последовательность команд выполнялась
бы, если в вашей программе был сделан переход в рассматриваемую
область данных.)

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

Можно также модифицировать содержимое ячеек памяти. Ввод
символа E (редактирование) позволяет это сделать. При этом
программа DEBUG выводит на дисплей значения отдельных ячеек памяти,
после которых следует символ. Вы можете изменить содержимое
ячейки, вводя новое значение, либо нажать клавишу пробела, чтобы
перейти к следующей ячейке, или - клавишу "возврат", чтобы
вернуться к режиму запроса следующей команды отладчика. В
рассматриваемом примере значения в первых трех ячейках остаются
прежними. Содержимое ячейки 04C5:0024 изменено со значения 61H на
значенее 20H. Так как эта ячейка входит в область данных, то
выводимое сообщение будет отличаться от тог, которое было в
транслированной программе.

В любой команде, обращающейся к ячейкам памяти, предполагается,
что адрес является частью команды. Команда E, как и команда
отображения, выводит на дисплей содержимое ячейки по указанному в
ней адресу. Точно так же можно было использовать адрес в команде
дизассемблирования. Можно ввести адрес в виде сегмента и смещения,
или только смещения. Если вы указали только смещение, то
соответствующий сегментный регистр будет выбран программой DEBUG. В
случае команды U используется регистр CS, а для команд D и E по
умолчанию сегмент будет определяться регистром DS.

Теперь попытаемся выполнить эту программу. Ее можно просто
запустить и посмотреть, что будет происходить. На для этого не
нужна программа DEBUG. Программа DEBUG позволяет задать точки
останова, называемые "точками прерывания" программы. Благодаря
введению в программу таких точек можно возвращать управление
программе DEBUG. Это дает еще одну возможность проверки состояния
памяти и регистров для того, чтобы контролировать ход выполнения
программы.

Команда G, (выполнять) передает управление от программы DEBUG
пользовательской программе. Выполнение команд начинается с ячейки,
задаваемой парой регистров CS:IP (так же, как в реальном
микропроцессоре). Тестируемая программа продолжает выполняться до
тех пор, пока она не пройдет точку прерывания. В нашем примере мы
задали точку прерывания по адресу 3CH. Так как мы указали только
смещение, то для определения сегмента программа DEBUG использует
содержимое регистра CS. Из листинга, приведенного на Фиг. 5.14,
видно, что смещение 3CH соответствует команде INT 10H. В
рассматриваемом примере программы было выбрано именно это место,
потому что это - та точка, где управление передается подпрограмме
BIOS, вызываемой из ПЗУ. Проверка программы в этой точке
гарантирует, что мя установили регистры в нужное состояние перед
выполнением подпрограммы BIOS.

Как только встречается точка прерывания, управление
возвращается программе DEBUG. При этом, так же как и в случае
команды R, на дисплей выводятся содержимое регистров и следующая
выполняемая команда. Так как управление опять передано программе
DEBUG, вы можете использовать любую из команд отладки.

Имеются ограничения на использование точек прерывания.
Фактически точка прерывания реализуется кодом операции 0CCH.
Соответствующая этому коду команда вызывает прерывание INT 3.
Данное математическое прерывание возвращает управление программе
DEBUG. Если какая-то команда возвращает управление отладчику, то
точка прерывания должна находиться в начале этой команды. Если же
точка прерывания выбрана где-то в другом месте, то управление не
будет возвращено отладчику и будет выполняться не та команда
программы, которая предполагалась. Например, если бы было задано
"=G 3D", то по адресу 3CH была бы команда INT 0CCH, и дальнейшее
выполнение программы предсказать трудно.

Если точка прерывания выбрана осмотрительно, то никаких
осложнений не будет. Командв "G" позволяет задать до десяти точек
прерывания. После прохождения любой из них происходит
восстановление исходных значений точек прерывания. Выполнение
команды отладки "G" без указания точек прерывания никогда не выйдет
ни на какую из ранее заданных точек прерывания, потому что все они
были удалены. Если вы запустили программу, и произошел ее останов и
она зациклилась, то возможно, что вернуть управление, которое
передано программе, удастся только с помощью клавиши системного
сброса Ctrl=Alt=Del, т.е. вам придется начать все с начала.
Запуская незнакомую программу, следует быть осторожным.

Если вы захотите ввести пермаментную точку прерывания,
воспользуйтесь командой E для изменения значения первого байта
команды на значение 0CCH. Эта точка прерывания будет там постоянно
или, по крайней мере, до тех пор, пока вы ее не измените. Возможно
вы захотите использовать это прерывание в точке входа в
подпрограмму обработки ошибки и проанализируете возникающие ошибки
более тщательно, чем при передаче их обработки программе.

Существует еще одно обстоятельство, связанное с точками
прерывания, о котором следует помнить. Если вы попытаетесь задать
точку прерывания в области, относящейся к ПЗУ, то ничего не
получится. Так как вы не можете менять содержимое ПЗУ, то команда
0CCH никогда туда не запишется.

Рассмотрим следующую команду отладчика - команда трассировки T.
Данная команда инициирует выполнение одной команды отлаженной
программы. В нашем примере команда T выполнена несколько раз. Как
вы можете убедиться, выполняется несколько первых команд BIOS,
вызванной по прерыванию INT 10H. Подпрограмма BIOS, естественно,
находится в ПЗУ. Команда трассировки позволяет "приостановить"
программу при ее выполнении в ПЗУ.

Перед передачей управления пользовательской программе команда
трассировки выставляет в регистре флагов соответствующий бит
трассировки. Этот бит инициирует прерывание INT 1 после выполнения
каждой команды. Вектор прерывания INT 1 возвращает управление
программе DEBUG. Выполнение прерывания INT 1 автоматически
сбрасывает бит трассировки в исходное состояние. Это значит, что
программа DEBUG не прерывается после выполнения каждой ее команды.
Команда трассировки служит прекрасным средством "пробиться" через
трудный участок программы. При этом программа DEBUG выводит на
экран каждую команду вместе с содержимым регистров как раз в
момент, предшествующий выполнению этой команды. Так как в данном
режиме используются не точки прерывания, а собственно прерывания,
то можно выполнять трассировку даже программ ПЗУ.

Вернемся к нашему примеру. Команда =G 4C5:3E обеспечивает
полное выполнение подпрограммы BIOS. Обратите внимание, что
программа вывела на дисплей символ "Э". Вызванная по прерыванию 10H
подпрограмма BIOS выводит символы на дисплей. В данном случае это
первый символ выводимого сообщения. Так как теперь можно быть
уверенными, что наша программа выполняется правильно, то, введя
символ "G", мы обеспечим выполнение программы до конца без точек
прерывания.

В данном примере рассматривался файл типа.EXE, и потому для
возврата управления системе DOS мы не могли использовать прерывание
INT 20H. Вместо этого программа записала в стек состояние регистра
DS и значение 0. Управление передается обратно системе DOS в конце
основной программы с помощью команды возврата типа FAR. Программа
DEBUG распознает это и фиксирует состояние машины в конце
тестируемой программы. Если бы это был файл типа.EXE, то
прерывание INT 20H аналогичным образом вернуло бы управление
программе DEBUG. Теперь, уделив достаточно времени этому примеру,
мы можем выйти из программы DEBUG и вернуться в систему DOS с
помощью команды завершения Q.

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


1)
Запустить Virtual PC 2007 с образом Windows XP. Перевести ОС в режим командной строки.

Пуск -> Выполнить -> Вводим cmd и нажимаем Enter .


2)
Получить и зафиксировать справку по опциям команды debug

В консоли: ввестиdebug , затем (?).

Краткий список всех команд:

A (assemble) — Транслирование команд ассемблера в машинный код. Адрес по умолчанию — CS:0100h .

С (compare) — Сравнение содержимого двух областей памяти. По умолчанию используется DS . В команде указывается либо длина участков, либо диапазон адресов.

D (dump) — Вывод содержимого области памяти в шестнадцатеричном и ASCII-форматах. По умолчанию используется DS . Можно указывать длину или диапазон.

E (enter) — Ввод в память данные или инструкции машинного кода. По умолчанию используется DS .

F (fill) — Заполнение области памяти данными из списка. По умолчанию используется DS . Использовать можно как длину, так и диапазон.

G (go) — Выполнение отлаженной программы на машинном языке до указанной точки останова. По умолчанию используется DS . При этом следует убедиться, что IP содержит корректный адрес.

H (hexadecimal) — Вычисление суммы и разности двух шестнадцатеричных величин.

I (input) — Считывание и вывод одного байта из порта.

L (load) — Загрузка файла или данных из секторов диска в память. . По умолчанию — CS:100h . Файл можно указать с помощью команды N или аргумента при запуске debug.exe.

M (move) — Копирование содержимого ячеек памяти; по умолчанию используется DS

N (name) — Указание имени файла для команд L (LOAD) и W (WRITE) .

O (output) — Отсылка байта в порт вывода.

P (proceed) — Выполнение инструкций CALL, LOOP, INT (цикла, прерывания, процедур) или повторяемой строковой инструкции с префиксами REPnn , переходя к следующей инструкции.

Q (quit) — Завершение работы debug.exe . Без сохранения тестируемого файла.

R (register) — Вывод содержимого регистров и следующей инструкции.

S (search) — Поиск в памяти символов из списка. По умолчанию используется DS . Можно указывать как длину, так и диапазон.

T (trace) — Пошаговое выполнение программы. Как и в команде P , по умолчанию используется пара CS:IP . Но для выполнения прерываний лучше пользоваться командой P .

U (unassemble) — Дизассемблирование машинного кода. По умолчанию используется пара CS:IP .

W (write) — Запись файла из debug.exe на диск. Необходимо обязательно задать имя файла командой N , если он не был загружен.


3)
Получим и зафиксируем дампы характерных областей RAM и ROM

Наберем команду R .

Регистры CS , DS , ES , SS в этот момент инициализированы адресом 256-байтного префикса сегмента програмы , а рабочая области в памяти будет начинаться с адреса этого префикса + 100h .

Правила набора команд:

А) В debug.exe не различается регистр букв.

Б) Пробелы в командах используется только для разделения параметров.

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

Г) Сегмент и смещение записываются с использованием двоеточия, в формате сегмент:смещение .


4)
Просмотр области памяти.

Команда D , позволяет просматривать содержимое отдельных областей памяти.
Проверим размер доступной для работы памяти. Для этого введем: d 40:13 и Ввод.
Первые два байта, появившиеся в результате на экране, содержат размер памяти в килобайтах и в шестнадцатеричном представлении, причем байты располагаются в обратной последовательности. У Нас это: 8002 0280 640 (К)

  • Адрес первого слева показанного байта в формате сегмент:смещение .
  • Шестнадцатеричное представление параграфа (16 байт), начинающегося с указанного в начале строки байта.
  • Символы этого же параграфа в ASCII-формате.


4)
Проверка параллельных и последовательных портов.


Первые 16 байт области данных BIOS содержат адреса параллельных и последовательных портов. Первые выведенные восемь байтов указывают на адреса последовательных портов COM1-COM4. Следующие 8 байтов указывают на адреса параллельных портов LPT1-LPT4. Адрес порта 78 03 – записывается в обращенной форме.


5)
Проверка состояния регистра клавиатуры.


В области данных BIOS по адресу 417h находится первый байт, который хранит состояние регистра клавиатуры..


6)
Проверка даты производства BIOS.


Сведения об авторских правах на BIOS встроены в ROM BIOS по адресу FE00:0 . Строку с копирайтом можно легко найти в ASCII -последовательности, а серийный номер - в виде шестнадцатеричного числа. На экране видим семизначный номер компьютера и дата копирайт. Хотя, строка с указанием авторских прав может быть длинной и не умещаться в выведенную область памяти. В таком случае следует просто ввести еще раз D .

Дата также записана в ROM BIOS начиная с адреса FFFF:5 . После выполнения соответствующей команды в ASCII -последовательности будет находиться эта дата, записанная в формате мм/дд/гг .


7)
Пример машинных кодов.


Рассмотрим создание программы на машинном языке, ее представление в памяти и результаты выполнения. Команда отладчика A (Assemble) переводит DEBUG в режим приема команд ассемблера и перевода их в машинные коды.

Теперь, когда программа введена в память, попробуем управлять ее выполнением. Для начала проверим текущее состояние регистров и флагов, для этого вводим команду R .


IP — регистр, содержащий адрес-смещение следующей команды, подлежащей исполнению, относительно кодового сегмента CS в процессорах семейства x86.

Регистр IP связан с CS в виде CS:IP , где CS является текущим кодовым сегментом, а IP — текущим смещением относительно этого сегмента.

Регистр IP является 16-разрядным регистром-указателем. Кроме него, в состав регистров этого типа входят SP (Stack Pointer — указатель стека) и BP (Base Pointer — базовый указатель).

Запись CX прошла успешно и равна 8-и. Произошла инициализация сегментов DS , ES , SS , CS одним и тем же адресом. Регистр IP содержит 0100 , указывая на то, что инструкции выполняются со смещения 100h относительно CS (с него и начинали).

Значение

Описание

Отсутствие переполнения

Направление вверх или вправо

Разрешение прерываний

Положительный знак

Ненулевое значение

Отсутствие дополнительного переноса

Нечетное слово

0 B 16 - адрес сегмента кода.
  • Машинный код, соответствующей этой инструкции (B025 ).
  • Собственно инструкция, записанная на ассемблере (MOV A L ,25 ).

  • 8)
    Команда отладчика U (Unassemble) показывает машинные коды для команд ассемблера.


    Выполним её. Необходимо сообщить отладчику адреса первой и последней команды, которые необходимо просмотреть (у Нас 100 и 107). Появятся инструкции, находящиеся в указанном диапазоне, на ассемблере, в машинных кодах, а также адрес каждой инструкции. Выполним программу пошагово, используя команду T .

    Использовав во второй раз команду T , мы выполнили инструкцию MOV . Машинный код операнда инструкции – 00D8 . Операция прибавляет AL к BL . Для выхода введем Q . И вновь дизассемблируем созданный testpi.com .


    9)
    Скопировать BIOS (С000:0 ... FFFF:F) в файл и сохранить файл для последующего анализа.


    Изменение или копирование кода BIOS может нарушить авторское право производителя BIOS . BIOS можно копировать или модифицировать только для целей индивидуального пользования, но не для распространения. Типичная процедура копирования BIOS с помощью программы DEBUG приведем ниже. Эта процедура сохранит в файле весь сегмент в 64 Кбайт с адреса F000:0000h по F0000:FFFFh .


    Выводы:

    • debug.exe можно применять для наблюдений и отладки программ на ассемблере и машинных кодах.
    • debug.exe позволяет трассировать программу, устанавливать точки останова, просматривать области памяти, вводить программы непосредственно в память компьютера.
    • debug.exe представляет загружаемые программы как программы .COM .
    • debug.exe воспринимает только числа в шестнадцатеричной системе.
    • debug.exe не различает регистр букв.

      Основной режим работы отладчика Debug (характерная особенность - присутствие чёрточки и мигающего справа от неё курсора). Основной режим работы устанавливается автоматически после загрузки отладчика.


    В этом режиме можно набирать любые макрокоманды отладчика от A до W . Выход из этого режима означает завершение работы отладчика.

      Режим ассемблирования . Вход в режим ассемблирования из основного режима работы отладчика осуществляется набором команды A . Признак нахождения в этом режиме - наличие адреса (например, 0CC0:0100 ) перед знаком курсора:


    После набора команды необходимо нажатием клавиши Enter ввести её в память (пока не нажата клавиша Enter команда в память не введена ).

    Если команда набрана с ошибкой и нажата клавиша Enter , эта команда в память не вводится. Вместо этого отладчик предлагает ввести её повторно, по тому же самому адресу :


    Возвращение из режима ассемблирования в основной режим работы отладчика - нажатие клавиши Enter в пустой строке (когда не набрано ни одного символа ), например, в строке 0CFC:0103 .

      Режим ввода данных . Данный режим может быть реализован во время выполнения макрокоманд E и R . В этом режиме вводятся данные в ячейки оперативной памяти или в регистры процессора:


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

      Режим выполнения кода . Вход в режим выполнения кода из основного режима работы отладчика осуществляется набором команды G . Как правило, время нахождения в данном режиме - считанные мгновенья. Исключение - зависание программы или выполнение огромных циклов.

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

      Режим ввода информации с клавиатуры во время работы в режиме выполнения кода. Завершение этого режима и продолжение выполнения кода осуществляется нажатием клавиши Enter.

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

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


    ПРИМЕЧАНИЕ
    Рисунки на этой странице не отображаются, но вы можете найти их в книге.


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

    Введем букву «а» (напоминаю в последний раз - все команды вводятся на английском языке) и нажмем ENTER.

    Затем введем программу, нажимая ENTER в конце каждой строки:

    0B72: 0100 MOV AH, 02 0B72: 0102 MOV DL, 41 0B72: 0104 INT 21 0B72: 0106 INT 20 0B72: 0108 Результат будет примерно таким, как показано на рис. 1.6.

    ПРИМЕЧАНИЕ 1
    Обратите внимание, что все числовые значения пишутся без буковки h в конце. Это потому, что Debug работает только с шестнадцатеричными числами, и ему не надо объяснять, в какой системе исчисления вводятся данные.

    ПРИМЕЧАНИЕ 2
    После ввода команды -а, появляются символы: 0B72: 0100. В вашем случае первые четыре символа могут быть другими, но нас они пока не интересуют. А как вы думаете, что означает число 0100? Помните директиву ORG 100h (см. раздел )? Вот-вот – это адрес, с которого начинается выполнение программы. То есть в память с этим адресом заносится первая команда программы (для файлов СОМ). Каждая команда занимает 2 байта, поэтому следующий адрес будет 0102 и т.д.

    Сами команды мы уже знаем (см. раздел ), поэтому описывать их здесь не будем.

    Программа написана – нужно проверить ее работу. Нажмём ENTER ещё раз, чтобы на экране появилась чёрточка, которая говорит о том, что можно вводить команду для Debug. Затем введем команду g (от английского «GO») и нажмем клавишу ENTER. На экране увидим следующее:

    G A Программа завершилась нормально - Здесь A – та самая буква, которая выводится на экран в результате работы программы. Затем идёт сообщение о нормальном завершении программы (оно может отличаться в зависимости от версии Debug).

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

    Введем команду t и нажмем клавишу ENTER. Увидим нечто вроде этого:

    AX=0200 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0B72 IP=0102 NV UP EI PL NZ NA PO NC 0B72:0102 B241 MOV DL,41 Это есть ни что иное, как состояние регистров процессора после выполнения первой строки программы. Как вы можете видеть, в регистр АН записалось число 02. В нижней строке находится адрес команды и сама команда, которая будет выполняться следующей.

    AX=0200 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0B72 IP=0104 NV UP EI PL NZ NA PO NC 0B72:0104 CD21 INT 21 Команда MOV DL, 41, как ей и полагается, записала в регистр DL число 41.

    Снова введем команду t и нажмем клавишу ENTER. Увидим следующее:

    AX=0200 BX=0000 CX=0000 DX=0041 SP=FFE8 BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0347 IP=0225 NV UP EI PL NZ NA PO NC 0347:0225 80FC4B CMP AH,4B Команды CMP AH,4B нет в нашей программе. Наша программа завершила свою работу. Мы можем долго еще вводить команду t – нам будут выдаваться состояния регистров. Почему это происходит, нам пока не интересно. Лучше введем команду g и нажмем клавишу ENTER, таким образом окончательно выполним нашу программу, и увидим то, что мы уже видели.

    Программа написана и проверена. Но как сделать ее самостоятельной, то есть как создать файл СОМ? Ведь то, что мы сделали, работает только с помощью Debug. Чтобы создать исполняемый файл, нужно ответить на несколько вопросов:

    1. Какого размера будет наш файл? Выполнение программы начинается с адреса 0100h, а последняя строка в программе содержит адрес 0108h. Это значит, что размер файла будет 8 байт (108h – 100h = 8).
    2. Как мы назовем наш файл? А хоть как. Однако, рекомендуется давать файлам английские имена, в которых содержится не более 8 символов (DOSу так приятнее работать). Назовем, например, debug_1.com
    А теперь выполним следующие действия:
    1. Снова напишем нашу программу (тренируйтесь, тренируйтесь...).
    2. Запишем в регистр СХ размер файла. Для этого введем команду r cx и нажмем ENTER. Затем введем размер файла (8 байт) и нажмем ENTER.
    3. Введем команду n, затем один пробел и имя файла. Нажмем ENTER.
    4. И, наконец, введем команду w и нажмем ENTER.
    В результате всех этих действий на экране появится следующая информация (см. также рис. 1.7): -r cx СХ 0000:8 -n debug_1.com -w Запись: 00008 байт - Если вы работаете в режиме эмуляции DOS из под WINDOWS, то файл debug_1.com сохранится на рабочий стол, либо в папку текущего пользователя. Это зависит от версии и/или настроек WINDOWS. Теперь его можно запустить как обычную программу. Если в указанных папках вы не нашли этот файл, то найдите его через поиск файлов. Ну а если вы не знаете, как это сделать, см. книгу Компьютер для чайников.

    Чувствую, что мы уже устали. Выход из Debug осуществляется командой q.

    Набравшись сил и терпения, изучим еще одну опцию Debug – дизассемблер. С его помощью можно дизассемблировать какой-нибудь СОМ-файл (то есть выполнить действие, обратное ассемблированию – преобразовать исполняемый файл в исходный код на языке ассемблера). Допустим, у вас есть программка, написанная не вами – ее исходный код вы не знаете, а посмотреть очень хочется. Для этого и существует дизассемблер.

    Итак, программа Debug у нас закрыта. Набираем в командной строке:

    Debug debug_1.com (где debug_1.com – это имя файла, который мы хотим дизассемблировать) и нажимаем ENTER.

    ПРИМЕЧАНИЕ
    Если программа не запустилась, значит нужно указать полный путь к ней, например

    C:\WINDOWS\COMMAND\debug debug_1.com Если же программа запустилась, но выдала ошибку (например: Ошибка 1282 или «Файл не найден»), то нужно указать полный путь к файлу, например: C:\WINDOWS\COMMAND\debug C:\MYPROG\debug_1.com Если и это не помогло, то, возможно, вы всё-таки где-то допустили ошибку в пути или путь не соответствует требованиям DOS. В таком случае лучше поместить программу в корень диска С, откуда она гарантированно загрузится по пути «C:\debug_1.com».

    Если Debug запустилась без сообщений об ошибках, то вводим команду u и нажимаем ENTER. Вот что мы увидим (примерно, см. также рис 1.8):

    U 0BC6:0100 B402 MOV AH, 02 0BC6:0102 B241 MOV DL, 41 0BC6:0104 CD21 INT 21 0BC6:0106 CD20 INT 20 0BC6:0108 56 PUSH SI 0BC6:0109 2E CS: 0BC6:010A 8A04 MOV AL, 0BC6:010C 0AC0 OR AL, AL 0BC6:010E 741A JZ 012A 0BC6:0110 3C3A CMP AL, 3A 0BC6:0112 750D JNZ 0121 0BC6:0114 2E CS: 0BC6:0115 807C0100 CMP BYTE PTR , 00 0BC6:0119 7506 JNZ 0121 0BC6:011B 2E CS: 0BC6:011C C60400 MOV BYTE PTR , 00 0BC6:011F EB09 JMP 012A - Посмотрите на первые четыре строки. Узнаете? Это наша программа. Остальные строки нас не интересуют (это инструкции, оставшиеся от программ или данных, отработавших до запуска Debug). Ну а если мы рассматриваем незнакомый файл, как узнать, где кончается программа и начинается «мусор»? Ориентировочно это можно сделать по размеру файла (для очень маленьких программ). Размер можно посмотреть в свойствах файла. Только следует учитывать, что в свойствах файла размер дан в десятичной форме, а Debug нам выдает шестнадцатеричные адреса. Поэтому придется перевести десятичное число в шестнадцатеричное.

    Есть еще вариант (который тоже не всегда приемлем) – найти в полученном списке строку, содержащую команду выхода из программы (INT 20).

    Если программа большая, то список ее команд не поместится на экран. Тогда снова вводим команду u и нажимаем ENTER. И так до конца программы.

    Возможно, вы не увидите на экране свою программу. Это может быть либо из-за того, что программа почему-то не загрузилась, либо по причине несоответствия адресов. Будьте внимательны: обращайте внимание на адреса памяти, которые указаны в левой колонке. Наша программа начинается с адреса 0100. Если адрес другой, то это, соответственно, не наша программа.

    С помощью ярлыка, помещенного на рабочий стол, щелкните его правой кнопкой мыши и выберите пункт «Свойства» в выпавшем контекстном меню. На вкладке «Ярлык» в окне, которое откроется в результате этого действия, кликните поле «Объект». Затем нажмите клавишу 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.