Boot Block. Он (бедолага) будет у нас один одинешенек. К нему уже ничего не пристыкуешь.
Имеет размер восемь килобайт. При загрузке в Иду задаем сегмент (Loading segment) F000h и смещение E000h. Жмем ОК и выбираем 16-разрядный режим. Ждем окончания загрузки.
Имеем на первое время загруженный бинарный файл без следа дизассемблирования - именно его Вам сейчас и предстоит совершить.
Помним, что точка входа в БИОС F000:FFF0h - это область БутБлока. Идем вниз до смещения FFF0h и видим первую инструкцию, исполняемую процессором, что-то типа EA 5B E0 00 F0. Жмем "С" - получаем jmp far ptr F000:EA5Bh. Понеслась...
Особенностью Boot Block-а является отсутствие стека и как следствие невозможность использования команды Call. Поэтому существует такая конструкция:
mov sp, Смещение_на_АдресВозврата
jmp НужнаяПроцедура
dw АдресВозврата //Это не код! Это двойное слово (dw). А если хотите то offset
Код_По_АдресуВозврата
Адрес возврата может быть положен в регистр di, за которым следует jmp на процедуру, а в теле процедуры (при выходе) ставят jmp di.
Иногда при выходе из процедуры могут поставить jmp на конкретный адрес.
Чуть попозже добавлю Примеры скриптов для IDA Pro
Отправить комментарий