как написать загрузчик

Тема в разделе "WASM.OS.DEVEL", создана пользователем hawk, 6 янв 2009.

  1. hawk

    hawk New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    155
    Здравствуйте.
    В направлении загрузчиков,я весьма мало знаю,поэтому заранее прошу прошения за возможные некорректные рассуждения.
    В общем хочу написать своё ntldlr,с целью записи его на форматированную fat32 флэшку,и дальмейшем запуском программы установки windows с дистрибутива.
    Подскажите пожалуйста,какие требования предьявляються к такому загрузчику и нет ли где примера(например исходник ntldlr).Заранее благодарен.
     
  2. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Ты хочешь загрузчик ОС или загрузчик Windows? Если ты задумал написать свой ntldr, то я тебе только пособолезную. =) Потому что это не простой загрузчик. Он делает массу работы, помимо загрузки ядра и запуска ОС.
     
  3. hawk

    hawk New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    155
    Нет, мне нужно просто чтобы я мог ставить Windows с флэшки. Т.е. основная задача моего загрузчика-это запустить другой процесс в среде которой он запускается с CD диска.
     
  4. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Ну так Grub тебе в руки. Он вроде как может грузить и винду и линукс. Только винду он то, не грузит, а просто передает управление ntldr. Можешь исходники его глянуть.
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Forever
    Причем тут груб.
    Ему установучную виндовс надо запустить. А он уже сам все сделает.
    Нужно просто раазобраться что и куда грузить.
     
  6. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ну раз речь идет о ntldr, значит, ты собрался ставить WinXP. В дистрибутиве WinXP есть программа установки, работающая в среде ms-dos и находящаяся в файле winnt.exe. Установить ms-dos на флешку можно без проблем (конечно, лучше ставить не оригинальную систему, а к примеру систему с загрузочного диска Win98SE). Чтобы процесс установки WinXP не был мучительно долгим, перед запуском winnt следует запустить smartdrv. Кстати, я не уверен, что винды можно устанавливать с помощью ntldr. Установщик виндов вроде бы называется setupldr, а ntldr - это просто загрузчик.
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
  8. hawk

    hawk New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    155
    мне нужно что-то именно на подобие ntldr,по тем причинам,что если понять как он работает(я имею ввиду до передачи управления),то не придётся писать mbr загрузчик.Как я понимаю после передачи управления от mbr лоадера,ntldrl распазнаёт файловую систему и грузит ,что-то по типу доса,и передаёт управление другому файлу.Вот собственно и всё что хотелосьбы.Кто нибудь подскажет как это сделать?
    и если кто знает как посматреть код ntldrl,дизассемблирит?
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ntldr состоит из двух частей, которые идут одна за другой. Первая - небольшой стаб, обычно несколько килобайт, переключающий режимы, включающий страничную трансляцию и передающий управление на вторую часть. Вторая часть - 32битный MZ PE (его можно найти, сделав поиск по сигнатуре MZ в ntldr. первое же совпадение - тот самый дос хидер)
    Вторая часть занимается собственно загрузкой ОС и драйверов и прочей ерундой, связанной с оборудованием.
    ntldr легко разделяется на эти двечасти любым хекс редактором, а вторая часть без труда анализируется в IDA.
    Так же в доступных в инете исходниках nt4 в папке boot можно найти исходники этого безобразия
     
  10. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Если дизассемблировать, то можно скачать отладочные символы к нему
     
  11. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    целых ~19 кб!
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Microedition
    по сравнению с полным размером ntldr это и правда немного
     
  13. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    если не надо сетапить вин64, то для этих целей мс-дос - самое то
    лучше от 98-ки, чтобы фат32 был встроенный
    запускаешь d:\i386\winnt.exe и все ставится
     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    z0mailbox
    А зачем тенуть MSDOS?
    Когда проще загрузить SETUPLDR.BIN
     
  15. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Pavia, а ты знаешь, как это правильно сделать? Если да, тогда поделись со вмеси! Кстати, разработчики загрузчика bcdw (Bootable CD Wizard) это знают точно. Может, у них спросить :)
     
  16. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Можно попробовать "разобрать" бутсектор с CD, на котором поставляются дистрибутив WinXP.
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Боюсь, что он просто грузит setupldr.bin
     
  18. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ну мля :) Это итак понятно. Вопрос в том, какое окружение он при этом создает, по какому адресу "грузит", грузит ли целиком или нет, какие параметры передает!
     
  19. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    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 берет эту переменную сохроняет в своем окруженее. Там структура на вспомогательные функции. Функции биоса вызывающиеся через переключение в реальный режим и обратно.

    Дальше идет инициализация. Идет определение железа и загрузка драйвера диска.
    Продолжение следует
     
  20. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ты что решил все винды раскрутить :) Хотя конечно интересно, как в setupldr реализовано то, что и я когда-то писал...

    bcdw можно было и не раскручивать, т.к. проще и надежнее получить нужную информацию из "родного" бутсектора от M$. Тем более я где-то читал, что у bcdw есть какие-то проблемы с загрузкой setupldr из WinXP SP2. Поэтому я, чтобы установить WinXP SP2 при помощи bcdw, прописываю в его конфиг. файле не setupldr, а образ "родного" бутсектора от M$, который сохраняю на диске в виде файла.