Здравствуйте. В направлении загрузчиков,я весьма мало знаю,поэтому заранее прошу прошения за возможные некорректные рассуждения. В общем хочу написать своё ntldlr,с целью записи его на форматированную fat32 флэшку,и дальмейшем запуском программы установки windows с дистрибутива. Подскажите пожалуйста,какие требования предьявляються к такому загрузчику и нет ли где примера(например исходник ntldlr).Заранее благодарен.
Ты хочешь загрузчик ОС или загрузчик Windows? Если ты задумал написать свой ntldr, то я тебе только пособолезную. =) Потому что это не простой загрузчик. Он делает массу работы, помимо загрузки ядра и запуска ОС.
Нет, мне нужно просто чтобы я мог ставить Windows с флэшки. Т.е. основная задача моего загрузчика-это запустить другой процесс в среде которой он запускается с CD диска.
Ну так Grub тебе в руки. Он вроде как может грузить и винду и линукс. Только винду он то, не грузит, а просто передает управление ntldr. Можешь исходники его глянуть.
Forever Причем тут груб. Ему установучную виндовс надо запустить. А он уже сам все сделает. Нужно просто раазобраться что и куда грузить.
Ну раз речь идет о ntldr, значит, ты собрался ставить WinXP. В дистрибутиве WinXP есть программа установки, работающая в среде ms-dos и находящаяся в файле winnt.exe. Установить ms-dos на флешку можно без проблем (конечно, лучше ставить не оригинальную систему, а к примеру систему с загрузочного диска Win98SE). Чтобы процесс установки WinXP не был мучительно долгим, перед запуском winnt следует запустить smartdrv. Кстати, я не уверен, что винды можно устанавливать с помощью ntldr. Установщик виндов вроде бы называется setupldr, а ntldr - это просто загрузчик.
мне нужно что-то именно на подобие ntldr,по тем причинам,что если понять как он работает(я имею ввиду до передачи управления),то не придётся писать mbr загрузчик.Как я понимаю после передачи управления от mbr лоадера,ntldrl распазнаёт файловую систему и грузит ,что-то по типу доса,и передаёт управление другому файлу.Вот собственно и всё что хотелосьбы.Кто нибудь подскажет как это сделать? и если кто знает как посматреть код ntldrl,дизассемблирит?
ntldr состоит из двух частей, которые идут одна за другой. Первая - небольшой стаб, обычно несколько килобайт, переключающий режимы, включающий страничную трансляцию и передающий управление на вторую часть. Вторая часть - 32битный MZ PE (его можно найти, сделав поиск по сигнатуре MZ в ntldr. первое же совпадение - тот самый дос хидер) Вторая часть занимается собственно загрузкой ОС и драйверов и прочей ерундой, связанной с оборудованием. ntldr легко разделяется на эти двечасти любым хекс редактором, а вторая часть без труда анализируется в IDA. Так же в доступных в инете исходниках nt4 в папке boot можно найти исходники этого безобразия
если не надо сетапить вин64, то для этих целей мс-дос - самое то лучше от 98-ки, чтобы фат32 был встроенный запускаешь d:\i386\winnt.exe и все ставится
Pavia, а ты знаешь, как это правильно сделать? Если да, тогда поделись со вмеси! Кстати, разработчики загрузчика bcdw (Bootable CD Wizard) это знают точно. Может, у них спросить
Ну мля Это итак понятно. Вопрос в том, какое окружение он при этом создает, по какому адресу "грузит", грузит ли целиком или нет, какие параметры передает!
Phantom_84 Там запутанная машинерия. Я вчера только посмотрел исходники виндоуса. MBR грузит bcdw тот грузит setupldr.bin по адрессу 2000:0000 в DL передает код диска который выдал биос. Также ниже следующии регистры dh - не используется ; CS = 2000 ; IP = 0000 ; DS = 07C0 ; ES = 1000 ; SS = 0000 ; SP = 7C00 ds ; segment of bios parameter block 7c00 si ; offset to bios parameter block ссылается на BPB es:di не используются Дальше setupldr.bin Инициирует видео систему останавливает мотор floppy. PatchDiskBaseTable - какойто хак с дискетами, позволят работать как с 5 так и 3 дюймовыми. Определения типа машины по ее шине ISA MCA EISA Дальше идет составление карты памяти ConstructMemoryDescriptors на основе int 15 e820h в случии неудачи другими способами. Дальше идет поиск куда можно загрузить PE часть. EnableA20(); разрешение линии A20 Relocatex86Structures переносит стрпуктуру GDT и IDT на новую базу. Которая будет в первой странице. EnableProtectPaging устанавливает флаги защищенного режима и страниц загружает инициирует регистры. RelocateLoaderSections - создает страницы и копируем PE части в нужные адресса. TransferToLoader передает управление PE части через хак. Плюс передает переменную на структуру. Вызывает двойную ошибку путем ; generates a double fault for debug purposes ; mov sp,0 ; push 0 ... mov cx,KeDataSelector mov ss,cx mov esp,LOADER_STACK ;** TMP HACK *** BUGBUG BUGBUG ... db 66h retf Дальше попдаем в PE часть а именно NtProcessStartup берет эту переменную сохроняет в своем окруженее. Там структура на вспомогательные функции. Функции биоса вызывающиеся через переключение в реальный режим и обратно. Дальше идет инициализация. Идет определение железа и загрузка драйвера диска. Продолжение следует
Ты что решил все винды раскрутить Хотя конечно интересно, как в setupldr реализовано то, что и я когда-то писал... bcdw можно было и не раскручивать, т.к. проще и надежнее получить нужную информацию из "родного" бутсектора от M$. Тем более я где-то читал, что у bcdw есть какие-то проблемы с загрузкой setupldr из WinXP SP2. Поэтому я, чтобы установить WinXP SP2 при помощи bcdw, прописываю в его конфиг. файле не setupldr, а образ "родного" бутсектора от M$, который сохраняю на диске в виде файла.