Команда DEBUG запускает интерактивный низкоуровневый отладчик, унаследованный из MS-DOS. Она позволяет читать и записывать содержимое памяти, просматривать и изменять регистры процессора, дизассемблировать двоичный код, а также запускать небольшие программы прямо из командной строки. Основной use-case — отладка 16-битных COM-файлов и изучение архитектуры x86 на базовом уровне.
- Синтаксис команды DEBUG
- Ключи и параметры (внутренние команды отладчика)
- Примеры использования
- Просмотр дампа памяти
- Изменение байта в памяти и запуск
- Создание минимального COM-файла
- Просмотр и изменение регистров
- Дизассемблирование загруженного файла
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- Работает ли DEBUG в Windows 10?
- Можно ли с помощью DEBUG редактировать файлы на диске?
- Чем DEBUG отличается от WinDbg?
- Как выйти из DEBUG, если программа зависла?
- Можно ли использовать DEBUG для обхода защиты программ?
Синтаксис команды DEBUG
DEBUG [имя_файла [параметры_файла]]
Плейсхолдеры:
имя_файла— необязательный путь к COM- или EXE-файлу, который нужно загрузить в память для отладки.параметры_файла— аргументы, которые будут переданы загружаемой программе.
После запуска DEBUG переходит в интерактивный режим с приглашением -. Здесь вводятся однобуквенные команды.
Ключи и параметры (внутренние команды отладчика)
| Команда | Описание | Пример |
|---|---|---|
A [адрес] | Ввод ассемблерного кода начиная с указанного адреса | A 100 — ввод с адреса CS:0100 |
D [диапазон] | Дамп памяти в hex и ASCII | D 0100 011F |
E адрес [значения] | Изменить байты памяти по адресу | E 0100 B8 01 00 |
U [диапазон] | Дизассемблировать машинный код | U 0100 0110 |
R [регистр] | Показать или изменить регистры процессора | R — все регистры; R AX — изменить AX |
G [=адрес] [адрес_останова] | Запустить программу (Go); при указании адреса останова — до точки останова | G — до конца; G =0100 0110 |
T [=адрес] [число_шагов] | Трассировка (Trace) — выполнить одну инструкцию с выводом регистров | T — один шаг; T 5 — пять шагов |
P [=адрес] [число] | Процедурный шаг (Proceed) — как T, но CALL выполняется целиком | P |
L [адрес] [диск] [сектор] [число] | Загрузить секторы диска или файл в память | L 0100 2 0 1 |
W [адрес] [диск] [сектор] [число] | Записать содержимое памяти на диск или в файл | W 0100 |
N имя_файла | Задать имя файла для последующих команд L/W | N test.com |
Q | Выйти из отладчика | Q |
Примеры использования
Просмотр дампа памяти
Нужно посмотреть, что находится по адресу CS:0100 после загрузки программы.
debug myprogram.com -D 0100 012F
Отладчик выведет шестнадцатеричный дамп 48 байт и их ASCII-представление справа.
Изменение байта в памяти и запуск
Нужно на лету заменить значение по адресу 0100 с B8 на 90 (NOP) и проверить поведение программы.
debug myprogram.com -E 0100 90 -G
Команда E записывает новый байт, затем G запускает программу. Изменения не сохраняются на диск — только в памяти текущей сессии.
Создание минимального COM-файла
Классический способ написать крошечную программу на ассемблере и сохранить её как COM-файл без компилятора:
debug -A 100 0C63:0100 MOV AH,09 0C63:0102 MOV DX,108 0C63:0105 INT 21 0C63:0107 INT 20 0C63:0108 DB 'Hello$' 0C63:010F -N hello.com -R CX CX 0000 :0F -W Writing 0000F bytes -Q
После Q в текущей папке появится файл hello.com, выводящий строку Hello.
Просмотр и изменение регистров
Перед трассировкой полезно проверить начальное состояние регистров и при необходимости скорректировать.
debug myprogram.com -R AX=0000 BX=0000 CX=0012 DX=0000 SP=FFFE ... -R AX AX 0000 :0001 -T
Команда R AX предлагает ввести новое значение AX, после чего T выполняет следующую инструкцию с выводом состояния всех регистров.
Дизассемблирование загруженного файла
Нужно быстро посмотреть, какие инструкции находятся в начале COM-файла.
debug unknown.com -U 0100 011F
Отладчик выведет мнемоники ассемблера с адресами и hex-кодами — базовый статический анализ без внешних инструментов.
Частые ошибки и решения
| Симптом | Причина | Решение |
|---|---|---|
| «debug» не является внутренней командой в Windows 10/11 | DEBUG.EXE удалён начиная с 64-битных версий Windows Vista и Windows 7 x64 | Использовать 32-битную Windows XP, DOSBox, или NTVDM на 32-битной Windows 7 |
| DEBUG запускается, но команды не выполняются на 32-битной Windows 7 | NTVDM (NT Virtual DOS Machine) отключён или не установлен | Включить через «Программы и компоненты» → «Включение или отключение компонентов» → NTVDM |
Программа зависает после G | Код попал в бесконечный цикл или некорректный адрес | Использовать G =0100 адрес_останова вместо безусловного G; при зависании — Ctrl+C |
«Error writing file» при команде W | Не установлен регистр CX (размер файла в байтах) перед записью | Перед W установить R CX с нужным количеством байт |
| Дизассемблер показывает бессмыслицу | Адрес указывает на данные, а не на код, или файл EXE (а не COM) | EXE-файлы имеют заголовок; начало кода ищите по смещению, указанному в заголовке PE |
Когда применять, а когда нет
Команда DEBUG была актуальна в эпоху DOS и Windows 9x/XP для отладки 16-битных программ, прямой работы с памятью и аппаратными портами. Права администратора для запуска не требовались, но NTVDM должен быть доступен.
На современных 64-битных Windows начиная с Vista файл debug.exe отсутствует в системе — команда попросту не работает. Не используйте DEBUG для работы с 32- и 64-битными приложениями: он их не понимает. Для современной отладки используйте WinDbg (Microsoft), x64dbg или встроенный отладчик Visual Studio.
Аналог в PowerShell или современном Windows: windbg.exe, ntsd.exe — для нативных приложений; для скриптов PowerShell — встроенный Set-PSBreakpoint.
FAQ
Работает ли DEBUG в Windows 10?
Нет, в 64-битных версиях Windows 10 и 11 файл debug.exe отсутствует. Для запуска 16-битного отладчика используйте DOSBox или виртуальную машину с Windows XP.
Можно ли с помощью DEBUG редактировать файлы на диске?
Да, с помощью команд L (загрузить секторы) и W (записать) в сочетании с E можно редактировать произвольные секторы диска. Это крайне рискованно на современных дисках — ошибка может уничтожить файловую систему.
Чем DEBUG отличается от WinDbg?
DEBUG работает только с 16-битным кодом в режиме реального времени DOS/NTVDM. WinDbg — полноценный отладчик ядра и пользовательского режима для 32- и 64-битных приложений Windows, поддерживает символы, расширения и анализ дампов памяти.
Как выйти из DEBUG, если программа зависла?
Нажмите Ctrl+C или Ctrl+Break — это прервёт выполнение и вернёт в приглашение отладчика. После этого введите Q для выхода.
Можно ли использовать DEBUG для обхода защиты программ?
Технически — можно изменять байты в памяти во время выполнения. Однако это нарушает лицензионные соглашения большинства программ, а на современных Windows не работает из-за отсутствия debug.exe и защитных механизмов типа DEP/ASLR.


