Чтение онлайн

на главную

Жанры

Восстановление данных. Практическое руководство

Касперски Крис

Шрифт:
Интерфейс INT 13h

Управлять дисками можно как через порты ввода/вывода, так и через BIOS. Порты намного более могущественны и интересны, однако BIOS программируется намного проще, к тому же она поддерживает большое количество разнокалиберных накопителей, абстрагируясь от конструктивных особенностей каждой конкретной модели. Поэтому будем действовать через нее, а точнее, через интерфейс прерывания

INT 13h
.

Попробуем прочитать сектор с диска в режиме CHS. Действовать нужно из самой MBR или из "голой" MS-DOS, иначе у нас ничего не получится, ведь Windows NT блокирует прямой доступ к диску даже из режима эмуляции MS-DOS.

Номер функции заносится в регистр

AH
.
В случае чтения он равен двум. Регистр
AL
отвечает за количество обрабатываемых секторов. Так как мы собираемся читать по одному сектору за операцию, занесем сюда единицу. Регистр
DH
хранит номер головки, a
DL
— номер привода (
80h
 — первый жесткий диск,
81h
— второй и т.д.). Пять младших битов регистра
CL
задают номер сектора, оставшиеся биты регистра
CL
и восемь битов регистра
CH
определяют номер цилиндра, который мы хотим прочитать. Регистровая пара
ES:BX
указывает на адрес буфера-приемника. Вот, собственно говоря, и все. После выполнения команды
INT 13h
считываемые данные окажутся в буфере, а если произойдет ошибка (например, головка "споткнется" о BAD-сектор), то BIOS установит флаг переноса (carry flag), и мы будем вынуждены либо повторить попытку, либо вывести грустное сообщение на экран.

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

Листинг 5.6. Код, считывающий загрузочный сектор или расширенную таблицу разделов

MOV SI, 1BEh ; Перейти к первому разделу

MOV AX, CS ; Настраиваем ES

MOV ES, AX

MOV BX, buf ; Смещение буфера

...

read_all_partitions:

 MOV AX, bud ; Читать 1 сектор с диска

 MOV DL, 80h ; Читать с первого диска

 MOV DH, [SI+1] ; Стартовый номер головки

 MOV CX, [SI+2] ; Стартовый сектор с цилиндром INT 13h

 JC error ; Ошибка чтения

 ;Обрабатываем считанный boot-сектор или расширенную таблицу разделов

 ;===================================================================

 ;

 CMP byte [SI], 80h

 JZ LOAD_BOOT ; Это загрузочный сектор

; Передаем на него управление

 CMP byte [SI+4], 05h

 JZ LOAD_CHS_EXT ; Это расширенная таблица разделов

; в формате CHS

 CMP byte [SI+4], 0Fh

 JZ LOAD_LBA_EXT ; Это расширенная таблица разделов

; в формате LBA

 ADD SI, 10h ; Переходим на следующий раздел

 CMP SI, 1EEh

 JNA read_all_partitions ; Читаем все разделы один за другим

...
buf rb 512 ; Буфер на 512 байт

Запись сектора в режиме CHS происходит практически точно так же, только регистр

AH
равен не
02h
, a
03h
. С режимом LBA разобраться намного сложнее, но мы, как настоящие хакеры, его обязательно осилим.

Чтение

сектора осуществляется функцией
42h
(
AH = 42h
). В регистр
DL
, как и прежде, заносится номер привода, а вот регистровая пара
DS:SI
указывает на адресный пакет (disk address packet), представляющий собой продвинутую структуру формата, описанного в табл. 5.4.

Таблица 5.4. Формат адресного пакета, используемый для чтения и записи секторов в режиме LBA

Смещение Тип Описание
00h
BYTE
Размер пакета —
10h
или
18h
01h
BYTE
Поле зарезервировано и должно быть равно нулю
02h
WORD
Сколько секторов читать
04h
DWORD
32-разрядный адрес буфера-приемника в формате
seg:offs
08h
QWORD
Стартовый номер сектора для чтения
10h
QWORD
64-разрядный плоский адрес буфера-приемника. Используется только в случае, если 32-разрядный адрес равен
FFFF:FFFF

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

Листинг 5.7. Код, осуществляющий чтение сектора с диска в режиме LBA

MOV DI, 1BEh ; Перейти к первому разделу

MOV AX, CS ; Настраиваем...

MOV buf_seg ; ...сегмент

MOV EAX, [DI+08h] ; Смещение partition относительно

; начала раздела

ADD EAX, EDI ; EDI должен содержать номер сектора

; текущего MBR

MOV [X_SEC] ;

...

read_all_partitions:

 MOV АН, 42h ; Читать сектор в режиме LBA

 MOV DL, 80h ; Читать с первого диска

 MOV SI, dap ; Смещение адресного пакета INT 13h

 JC error ; Ошибка чтения

...

dap:

packet_size db 10h ; размер пакета 10h байт

reserved db 00h ; "Заначка" для будущих расширений

N_SEC dw 01h ; Читаем один сектор

buf_seg dw 00h ; Сюда будет занесен сегмент буфера-приемника

buf_off dw buf ; Смещение буфера-приемника

X_SEC dd 0 ; Сюда будет занесен номер сектора для чтения

dd 0 ; Реально не используемый хвост

; 64-битного адреса

Поделиться:
Популярные книги

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Не ангел хранитель

Рам Янка
Любовные романы:
современные любовные романы
6.60
рейтинг книги
Не ангел хранитель

Право налево

Зика Натаэль
Любовные романы:
современные любовные романы
8.38
рейтинг книги
Право налево

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Фараон

Распопов Дмитрий Викторович
1. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Фараон

Инквизитор Тьмы

Шмаков Алексей Семенович
1. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы

Барон устанавливает правила

Ренгач Евгений
6. Закон сильного
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Барон устанавливает правила

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Сам себе властелин 2

Горбов Александр Михайлович
2. Сам себе властелин
Фантастика:
фэнтези
юмористическая фантастика
6.64
рейтинг книги
Сам себе властелин 2

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

Повелитель механического легиона. Том VI

Лисицин Евгений
6. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VI

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник

Наследница долины Рейн

Арниева Юлия
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Наследница долины Рейн