Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если у вас есть исходные файлы C или C++ для приложения, вы можете использовать отладчик гораздо эффективнее при отладке в исходном режиме.
Однако существует много раз, когда невозможно выполнить отладку источника. Возможно, у вас нет исходных файлов для приложения. Возможно, вы отладите код другого пользователя. Возможно, вы не создали исполняемые файлы с полными символами PDB. И даже если вы можете выполнить отладку источника в приложении, может потребоваться отслеживать подпрограммы Microsoft Windows, которые вызывает приложение или которые используются для загрузки приложения.
В таких ситуациях необходимо выполнить отладку в режиме сборки. Кроме того, в режиме сборки есть множество полезных функций, которые отсутствуют в отладке источника. Отладчик автоматически отображает содержимое расположений памяти и регистров по мере доступа к ним, а также отображает адрес счетчика программы. Этот дисплей делает отладку сборки ценным инструментом, который можно использовать вместе с исходной отладкой.
Код дизассемблирования
Отладчик в основном анализирует двоичный исполняемый код. Вместо отображения этого кода в необработанном формате отладчик разбирает этот код. То есть отладчик преобразует код из языка компьютера в язык сборки.
Результирующий код (известный как код дизассембли) можно отобразить различными способами:
Команда u (Unassemble) дизассемблирует и отображает указанный раздел языка компьютера.
Команда uf (Unassemble Function) дизассемблирует и отображает функцию.
Команда "Вверх" (Unassemble from Physical Memory) дизассемблирует и отображает указанный раздел языка компьютера, хранящегося в физической памяти.
Команда ur (Unassemble Real Mode BIOS) дизассемблирует и отображает указанный 16-разрядный код реального режима.
Команда ux (Unassemble x86 BIOS) дизассемблирует и отображает набор инструкций кода BIOS на основе x86 по указанному адресу.
(только WinDbg) Окно дизассемблирования выполняет дизассемблирование и отображает указанный раздел машинного кода. Это окно автоматически активируется, если вы выберете команду автоматически открыть дизассемблер в меню окна. Вы также можете открыть это окно, выбрав дизассембли в меню представления, нажав клавиши ALT+7 или нажав кнопку дизассембли (ALT+7).
Дизассемблированный код представлен в четырех столбцах: смещение адресов, двоичный код, мнемоника языка ассемблера и детали языка ассемблера. В следующем примере показан этот экран.
0040116b 45 inc ebp
0040116c fc cld
0040116d 8945b0 mov eax,[ebp-0x1c]
Справа от строки, обозначающей текущий указатель программы, на дисплее отображаются значения любых ячеек памяти или регистров, к которым осуществляется доступ. Если эта строка содержит инструкцию ветви, появится нотация [br=1] или [br=0] . Эта нотация указывает на ветвь, которая или не принимается соответственно.
Вы можете использовать команду ASM (Изменение параметров дизассембли) для изменения способа отображения дизассембированных инструкций.
В окне дизассембли WinDbg выделена строка, представляющая текущий счетчик программы. Строки, в которых задаются точки останова, также выделены.
Для управления кодом сборки можно также использовать следующие команды:
Команда #(Search for Disassembly Pattern) выполняет поиск области памяти для определенного шаблона. Эта команда эквивалентна поиску четырех столбцов отображения дизассембли.
Команда (Assemblye) может принимать инструкции по сборке и переводить их в двоичный код компьютера.
Режим сборки и исходный режим
Отладчик имеет два разных режима работы: режим сборки и исходный режим.
При одношаговом выполнении приложения размер одного шага — одна строка кода сборки или одна строка исходного кода в зависимости от режима.
Несколько команд создают разные представления данных в зависимости от режима.
В WinDbg окно Disassembly автоматически перемещается на передний план при запуске или пошаговом выполнении приложения в режиме ассемблера. В исходном режиме окно "Источник " перемещается на передний план.
Чтобы задать режим, можно выполнить одно из следующих действий:
Используйте команду l+, l- (задать параметры источника) для управления режимом. Команда l-t активирует режим сборки.
(только WinDbg) Снимите флажок команды Режим источника в меню Отладка, чтобы переключить отладчик в режим ассемблера. Можно также выбрать кнопку Исходный режим выкл. на панели инструментов.
В WinDbg, когда вы находитесь в режиме сборки, ASM отображается на строке состояния.
Контекстное меню в окне дизассембли WinDbg содержит команду Выделить инструкции из текущей строки исходного кода. Эта команда выделяет все инструкции, соответствующие текущей исходной строке. Часто одна исходная строка соответствует нескольким инструкциям сборки. Если код оптимизирован, эти инструкции сборки могут быть не последовательными. Команда "Выделить инструкции из текущей исходной строки" позволяет найти все инструкции, собранные из текущей исходной строки.
Исходные файлы языка сборки
Если приложение было написано на языке сборки, дезассемблированное, которое отладчик создает, может не совпадать с исходным кодом. В частности, NO-OPs и комментарии будут отсутствовать.
Если вы хотите выполнить отладку кода, ссылаясь на исходные ASM-файлы, необходимо использовать отладку в исходном режиме. Файл сборки можно загрузить, как исходный файл на C или C++. Дополнительные сведения об этом типе отладки см. в разделе "Отладка в режиме источника".