Исследования ядра LINUXа


Рисунок 5 изменение атрибутов сегмента в IDA Pro


Мы видим, что boot-сектор перемещается по адресу 9000h:0000h и считывает с диска вторичный загрузчик, который так же расположен внутри vmlinuz, сразу вслед за boot-сектором. Здесь расположены модули setup.S и video.S, загружающиеся по адресу 1000h:0000h и работающие в 16-разрядном режиме. Начало модуля setup.S опознается по сигнатуре "HdrS", следующей после jmp'а. Конец video.S легко определить по строкам: CGA/MDA/HGA/EGA/VGA/VESA/Video adapter, вслед за которыми идет "магическая последовательность" 00 00 B8 00 00. В обоих ядрах он расположен по смещению 14FF от начала файла. Таким образом, вторичный загрузчик начинается со смещения 200h и заканчивается в 14FFh. Он так же исполняется в 16-разрядном режиме и представляет собой смесь кода и данных, поэтому дизассемблировать его приходится с большой осторожностью (см. рисунок 6). Но прежде необходимо создать сегмент, ведь прошлый сегмент был усечен! Говорим Edit à Segment à New Segment, вводим имя сегмента (например, "ldr"), адрес начала (200h) и конца (1500h), а так же базовый адрес, равный стартовому адресу, деленному на 10h. Форсируем 16-битный режим и давим ОК.

 




Начало  Назад  Вперед



Книжный магазин