Дебаг программы что это

Содержание

Что такое отладка?

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

И все же краткое вступление с теорией будет. Поэтому если вы знаете что такое отладка, то пропустите этот раздел и листайте вниз, или сразу перейдите к второй части.

Отладка или debugging приложения — это процесс поиска и исправление ошибок или неправильного поведения кода.

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

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

DEBUG ЧТО ЭТО И КАК ДЕБАЖИТЬ НА РЕАЛЬНЫХ ПРИМЕРАХ в JAVA | АВТОМАТИЗАЦИЯ НА ПАЛЬЦАХ

Основы отладки

В этой статье я расскажу базовые вещи и возможности отладчика в Android Studio. В следующей статье я постараюсь рассказать о некоторых тонкостях и продвинутых возможностях работы с отладкой.

Как запустить отладку — Android Debugger

Запустить отладчик в Android Studio можно двумя способами:

Первый способ: Запустить приложение в режиме отладки. Стоит использовать если нужно отладить именно запуск приложения. Для отладки конкретного действия-экрана лучше использовать второй способ, так быстрее.

Второй способ: Подключить Android Debugger к уже запущенному процессу. Удобно, потому что бывает нужно продебажить конкретный экран или нажатие на кнопку, а запускать каждый раз приложение в режиме отладки долго и неудобно.

Как остановить отладку

Остановить отладку можно здесь:

Breakpoins или точки остановки

Breakpoint или точка остановки — специальный флаг для Android Debugger-a который означает “Останови выполнение программы в этом месте”.

На скриншоте выше видно две точки остановки. Интересно, что они сообщают некую информацию о себе: одна из них с галочкой а другая с крестиком.

Галочка значит что эта точки остановки активная и кода выполнение кода подойдет к этой строке выполнение программы будет остановлено.

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

Как сделать точку остановки — breakpoint

Для добавления точки остановки нужно кликнуть на серой области напротив строки с кодом или нажать ⌘+F8.

Выбор точки остановки — set breakpoint

Практически все современные Android приложения используют Kotlin и RxJava. И при типичном использовании этой связки языка и библиотеки при добавлении точки остановки иногда появляется такой выбор:

Android Studio предлагает нам выбрать где именно мы хотим добавить точку остановки — момент выполнения метода subscribe в Rx-цепочке или выполнение кода внутри лямбды, которую мы передаем в subscribe. А можно поставить точку остановки сразу для двух действий (All).

Без этого вы не станете программистом! Найти ошибку в коде. Отладка. Как пользоваться отладчиком #23

Примечание для новичков: Если вы хотите отладить действие, которое вы планируете выполнить внутри метода subscribe, и не поняли в примере выше где именно вам поставить точку остановки — вам нужно поставить ее внутри лямбда выражения.

Просмотр информации во время отладки приложения

Подсказки от Android Studio

Подсказки от Android Studio во время отладки — приятный бонус. В них отображается полезная информация, например значение локальных переменных, аргументов и объектов (для них выводится информация из метода toString() соответствующего объекта).

Стек вызова методов — Frames

В вкладке Debugger во время остановки выполнения приложения выводится стек вызова методов.

Благодаря этому можно понять — откуда мы попали в текущий метод.

Желтым цветом подсвечиваются классы Android SDK или библиотек — там, где у нас нет доступа к исходному коду.

Формат вывода информации о методе такой:

  • Название метода — methodThree
  • Номер строки с точкой остановки— 22
  • Название класса — DebugStateDemoObject
  • package класса

Просмотр информации состояния объекта и переменных — Variables

Помимо панели со стеком вызова методов в вкладе Debug также находится и панель с выводом текущего состояния и значениями локальных переменных.

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

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

Изменение значения переменой “на лету”

Значение локальной переменной можно изменить нажав правой клавишей мышки -> Set value… или по нажатию на F2.

Стек методов + состояние объекта

Стоит запомнить, что состояние объекта при переходе по стеку методов не меняется. То есть, при просмотре методов из стека в разделе с информацией о состоянии объекта и локальных переменных, он же Variables, будет показано самое последнее состояние объекта не зависимо от просматриваемого метода.

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

Управление процессом отладки

Во время отладки Android Debugger в Android Studio позволяет нам управлять процессом отладки.

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

Продолжить выполнение программы

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

Приостановить выполнение программы

Есть возможность и просто приостановить приложение во время отладки поставив его на паузу. Сам этот режим, его цель и как он работает я, если честно, не очень понял. Я сделал эксперимент с бесконечным циклом, внутри которого инкрементяться 3 переменных типа Long, и в случайный момент делал паузу: выполнение кода останавливалось на строке с объявлением while(true), я даже видел значения переменных, но на этом все.

Читайте также:
Что за программа litebox

Остановка отладки

Саму отладку можно остановить по нажатию на кнопку стоп. В последнее время останавливается не только отладка но и приложение; грустно.

Просмотр и настройка breakpoints (точек остановок) в проекте

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

Приглушить все breakpoints

А еще можно приглушить (Mute) все наши точки остановки по нажатию на эту кнопку. Интересно что во время отладки по нажатию на эту кнопку точки остановки действительно не отрабатывают, но у меня после отключения этой возможности точки оставались “приглушенными” и дальше. Может быть баг Android Studio а может и эмулятора — я этого не понял и выглядит это странно. Если кто-то мне подскажет что происходит я буду очень рад!

Получение dump-а потоков приложения

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

Этот режим будет полезен при отладке сложных, многопоточных приложений.

Настройка отображения данных и UI вкладки Debug

Первая иконка может восстановить разметку вкладки Debug в первоначальное состояние (если чото сдвинули мышкой неудачно)

Вторая кнопка откроет меню в котором можно настроить отображение информации.

Третья кнопка предлагает закрепить текущую вкладку в разделе Debug а четвертая кнопка, та что крестик, закроет вкладку соотвественно.

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

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

Давайте разберемся с этим!

Перейти к текущей точке остановки

По нажатию на эту кнопку курсор и фокус будет перемещены на текущую точку остановки. Удобно если потерялся.

Переход к следующей строке

Переход к следующей строке кода внутри текущего метода, не заходя в вызываемый метод (если он вызывается).

Переход дальше + принудительно

Переход в вызываемый метод к его первой строке.

Красная стрелка — тоже самое, но делает это принудительное, если по какой то причине просто перейти нельзя.

Выход из текущего метода

Выход из текущего метода на следующую строку кода

Выполнить до курсора

А еще можно выполнить код до той строки, на которой находится курсор. Курсор перед этим можно перемещать до куда нам нужно. Очен здоровская возможность!

Debug like a pro

В этой статье мы разобрали основы отладки в Android разработке. В следующей статье я планирую рассказать о продвинутых возможностях отладки что поможет вам дебажить код как настоящий профи!

Дополнительная информация:

  • Этот раздел будет дополнятся по мере написания новых публикаций. Подписывайтесь чтоб не пропустить!

Источник: medium.com

Дебаг программы что это

Привіт! Дійшов до місця запуску методу main() і тут: Пропускаю статтю до вирішення проблеми 🙁

23 ноября 2022
Для 5 уровня туговато, но за часик осилил!)
13 ноября 2022
Статья явно не для начального уровня. Программа взятая для объяснения должна быть попроще.
28 октября 2022
Добавила в закладки. Думаю, вернусь еще
Anatoli Tsoi Уровень 10
10 октября 2022

Спасибо, хороший материал!
6 октября 2022

Что то пошло не так, с самого начала. Простите как быть если нет вкладки «Import Project» ?

19 сентября 2022
Пишет java: package lombok does not exist и java: cannot find symbol symbol: class Data
Hotric Уровень 11
5 сентября 2022
Интересная статья

2 сентября 2022

В тексте сказано: Main.java:14 — в классе Main на 14-й строке Однако на скриншоте после первого запуска объекта main() breakpoint стоит не на 14 строке а на 23.

31 августа 2022

Интересно. Все сделал. Мало что понял. Надеюсь, что все так и задумано. Что план потихоньку заставлять привыкать к интерфейсу, чтобы потом было легче. Иначе я очень-очень тупой =)

Сообщество

JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.

Подписывайтесь
Язык интерфейса
Скачивайте наши приложения

Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.

Источник: javarush.com

Работа с Debug

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

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

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

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

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

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

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

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

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

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

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

В данном фрагменте мы просматриваем регистр АХ и очищаем его (пишем в него 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 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:0100 B83412 MOV AX,1234
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 входит в поставку во все Винды вплоть до ХР. Я думаю, что это поможет вам веселее провести время за чужим компом, вызывая истинное удивление хозяина (дисков и дискет-то вы не приносили. ) новыми эффектами работы его оборудования. Успехов, юные любители хакерного экстрима!

Источник: xakep.ru

2.3. Отладчик Debug

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 ” при работе распечатывает в следующей после ее ввода строке адрес, состоящий из двух чисел, и старое значение байта по этому адресу: :, далее компьютер ожидает ввода нового значения байта.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:
Wps office что это за программа отзывы

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

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

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

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

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

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

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

Источник: studfile.net

Записки Ищущего Истину Программиста

Программирование и админка с почесыванием уха рукой через голову.

Поиски истины

  • Всё подряд
  • Змий искуситель
  • Работа с cmd, bat, debug в Windows
  • Вирт с машинами

5 сент. 2014 г.

Работа с командной строкой Windows, Программа Debug и её использование

Работа с командной строкой Windows. Программа Debug и её использование.

Запуск 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 (с него и начинали).

Здесь же указаны и значения флагов переполнения, направления, прерывания, знака, нуля, дополнительного переноса, четности и переноса:

Источник: domenzero.blogspot.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru