Как сохранить, восстановить, отредактировать MBR (Master Boot Record), boot sector, нулевой, загрузочный сектор диска при помощи утилиты debug.exe

1. Загрузить компьютер, с загрузочного DVD диска, загрузочной дискеты или загрузочной флешки, ( см. как создать загрузочную флешку / USB flash)

2. Запустить утилиту debug.exe.  Debug.exe присутствует в любой  DOS, Windows но она чувствительна к версии, т.е. если переписать на загрузочный диск Win98 debug.exe из XP она не запустится. ( см. Загрузочная флэшка ).

3. Загрузить компьютер запустить debug.exe.

Теперь вводим короткую программу.

A100 <Enter>

int13<Enter>

jmp100<Enter><Enter>

u100 102<Enter>

r<Enter>

Пояснения:

a, u, r - команды утилиты debug

? - выводит полный список команд.
a  - позволяет вводить программу с адреса
u - показывает  программу
r - показывает регистры процессора
AX,BX,CX,DX,SP,BP,SI,DI  это регистры процессора.
DS,ES,SS,CS - сегментные регистры значения в них будут отличаться от тех что на картинке, но они будут одинаковые.

IP(Instruction Pointer)  регистр команд, указывает на адрес XXXX:0100, куда мы ввели команду INT13. 

INT 13 команда процессора, вызывает подпрограмму BIOS для работы с дисками. Параметры передаются через регистры.

Команда JMP100 возвращает указатель команд на адрес 100

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

Итак освоим чтение загрузочного сектора. Master Boot Record

Вводим команды

rax<Enter>
201<Enter>
rbx<Enter>
200<Enter>
rcx<Enter>
1<Enter>
rdx<Enter>
80<Enter>

r<Enter>

 

нетрудно догадаться, что команда r<имя регистра> позволяет менять значение в регистре процессора.

Для вызова int13 смысл этих значений такой:
AX=02 старший байт код операции 02=чтение  ( 03=запись )
01

младший байт количество секторов которое надо прочитать

BX=0200 адрес памяти куда считывать сектор
CX=0001 младшие биты задают номер сектора.  Сектора нумеруются с 1
DX=00 старший байт номер головки, головки нумеруются с нуля
80 младший байт номер диска 01 для флоповода, 80,81  для жестких дисков и USB flash дисков, которые BIOS видит как жесткий диск.

Теперь вводим

p<Enter>
p<Enter>

команда p выполняет один шаг программы.

Первый раз вызывает  INT13, второй возвращает IP на адрес 100.

после вызова INT13 важно проконтролировать последние две буквы регистра флагов CY-означает ошибку, при успешном выполнении должно быть NC. (На картинке CY, т.к. из под Windows нельзя прочитать MBR, а из под DOS нельзя создать скриншот)

Итак мы прочитали нулевой сектор в память по адресу 200.

Чтобы сохранить его в файл вводим

n <файл><Enter>
rbx<Enter>
0<Enter>
rcx<Enter>
200<Enter>
r<Enter>
w200<Enter>

 

Команда n<filename> задает имя файла. Команда w<address> записывает в файл данные из памяти по адресу. Количество байт задается сразу в двух регистрах BX:CX.

Чтобы загрузить файл в память используем команду L<address>. В регистре CX ,будет количество прочитанных байт. Чтобы просмотреть память по адресу (в нашем случае, там содержимое нулевого сектора) команда d<address>

n <файл><Enter>
L200<Enter>
r<Enter>
d200x<Enter>
d<Enter>

 

Рассмотрим варианты редактирования данных перед записью их обратно на диск.

f200 3bd 00 обнуляет загрузочную программу но оставляет информацию о разделах диска нетронутой.

Команда e<address> позволяет редактировать память.

Чтобы записать данные из памяти на диск вводим.

rax<Enter>
301<Enter>
rbx<Enter>
200<Enter>
rcx<Enter>
1<Enter>
rdx<Enter>
80<Enter>

r<Enter>

p<Enter>

Надо перезагрузить

 

Программы

Remote Control - Программа для удаленного доступа к компьютеру.
ImageConverter - Программа для уменьшения фотографий.
AutoShutdown - Программа для автоматического выключения компьютера.
Work time counter - Простая программа для учета рабочего времени.
ClearFolders - Программа для массового удаления файлов.
SynchronizeFolders - Программа для синхронизации каталогов.
DiskSector - Утилита позволяет осуществлять чтение / запись секторов диска в / из файла.
ROPTest - Программа изображает все 256 вариантов флагов Ternary Raster Operations Codes, помогает определить необходимый код растровой операции.
HEX Dump ActiveX позволяет просматривать и редактировать данные в шестнадцатеричном HEX формате.
15 slide puzzle - 15 slide puzzle game.
BOOTSAVER - Позволяет скопировать загрузочный сектор жесткого диска в файл, восстановить загрузочный сектор из файла, восстановить загрузочную программу IPL1, не меняя таблицу разделов диска.
Генератор кроссвордов. Описание алгоритм компьютерного составления кроссвордов.
Симулятор 80196. Программный симулятор микроконтроллера Intel 80196KR. Имеет встроенный компилятор ассемблера, текстовый редактор, справочную систему. Может создавать HEX файлы.
Ассемблер. Оригинальный компилятор ассемблера х86.
DISKEDIT Программа позволяет просматривать и редактировать сектора дисков. Работает через прерывание INT13.

Программирование

WPF, XPS, NET. Как установить шрифт из памяти
Нейронные сети. Пример программы и исходный код С++.
Deflate. Подробное описание алгоритма декодирование формата Дефлет. Прмер декодирования с пояснениями.
Программирование драйверов для Windows. Общие вопросы программирования драйверов. Какими средствами пользоваться, где скачать DDK.
Программирование RS232 в Windows. СComBase класс для программирования COM порта.
Программирование потоков в Windows. Класс CBaseThread позволяет организовать несколько рабочих потоков.
Динамический Recordset CDynamicRecordSet - класс модернизирует CRecordSet для более удобной работы с БД из MFC приложений.
Как сохранить, восстановить, отредактировать MBR (Master Boot Record), boot sector, нулевой, загрузочный сектор диска при помощи утилиты debug.exe

evmsoft.net © 2014