Помогите примером кода для загрузчика и MBR

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

  1. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Решил, наконец, разобраться с этим. Погуглил, нашёл вот что http://ru.wikipedia.org/wiki/MBR#MBR_.D0.BE.D1.82_Microsoft_.28MS_DOS_.D0.B8_MS_Windows.29

    Всю эту теорию я уже год как знаю, но руки всё не доходят поиграться, а свободный систмник есть.
    Как я онимаю, я должен на нулевой сектор диска записать свой bin файл, который я странслировал, например, на fasm. Я должен уместить свой код до смещения 1BE.

    обишь я пишу прогу общения (код которой будет исполняться сразу), в которой надо будет всё писать через прерывания клавиатуры и экрана (для общения с пользователем) затем пишу что-то вроде

    org 0x1BE
    db 1;
    db 1; //как выбрать головку?
    db 00000001b; // 1ый сектор (нулевой уже занят) нулевая дорожка
    и так далее

    У меня много вопросов Начиная от того, как выбирать всякие головки на жёстком диске, и заканчивая тем, как же странслировать в обычный bin файл, я уже много забыл про fasm(.
    Помогите, пожалуйста, каким-нибудь примером заглушкой. Можно и не на fasm.
    Заранее огромное спасибо.
     
  2. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    В принципе можно взять, и дизасемблить свой диск. Но хочется именно пример заглушку.
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    http://www.wasm.ru/srclist.php?list=11
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в гугле много примеров.
    простых и очень простых.
     
  5. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    На любой вопрос можно овтетить "погугли". Это уже притча во языцах. Я просто уже устал от большого количества теоритических статей, которые я понял. Но от этого я сам так и не могу до сих пор написать собственный загрусчик, я просто не знаю как и с чего начать. Я люблю конкретику, а в подобных статьях её нет. Поэтому я и попросил помощи на форуме, и я очень надеюсь на вас. Пожалуйста, опишите по шагам, как написать собственную заглушку вместо загрузчика, и определить один раздел жёсткого диска в MBR. Всю теорию по данному вопросу я знаю. Требуется лишь конкретика, вроде: берешь такой-то транслятор, пишешь то-то (вот здесь и нужна конкретика), жамкаешь то-то, для того, чтобы получить правильный bin файл (опять конкретика), открываешь диск с помощью, например HxD, пихаешь в 0ой сектор этот bin файл, далее берёшь другой bin файл в который вогнал MBR (опять требуется конкретный MBR под один диск), переставляешь диск на другой системник и вуоля.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    на фоурме фасма есть конкретика.
     
  7. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Да, и где скачать SIMx86 ?
     
  8. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Antolflash
    Вообще-то, если расписать всё по шагам, то Вы, возможно, успешно это реализуете, но вряд ли существенно продвинетесь в понимании того, как это надо делать -- ведь вся работа по проектированию программы (а именно проектирование, а не кодирование, является самой сложной и важной частью программирования) сделана за Вас. Может, лучше попробовать всё же сделать всё самому? Для начала расписать на бумаге по шагам, что предполагаемая "заглушка" должна сделать, ну а потом, убедившись, что шаги верные (озвучив, например, их в этой теме), заняться их кодированием.
     
  9. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    SII, давайте я составлю проэкт программы, а вы уже не отвертитесь и поможите мне конкретикой?
    Итак, мой проэкт по пунктам, последовательность действий и то, что я хочу от заглушки, /* А вот тут мои конкретные вопросы, на которые, я надеюсь, вы ответите */

    1) Открываю в HxD 0й раздел работающего диска, копирую эти 512 байт в дизасеблер.
    /* Какой дизасемблер лучше выбрать? Выбирать лучше так, чтобы синтаксис совпал с тем транслятором, котрым я буду пользоваться. Что выбирем? Давайте FASM. Где скачать подобный дизассемблер? */

    2) Изучаю дизассемблированный код. Нахожу куда идут джампы (из любопытства). Иду по смещению 1BE, изучаю MBR. Пытаюсь понять какие параметры суются в MBR, особенно интересуют номера головок, идентифекаторы файловых систем и т.д.

    3) На моём системнике два физических диска, вставляю третий ненужный винт, в нулевой его сектор пихаю код, который просто в цикле выводит символы на экран, далее по смещению 1BE я пытаюсь понять, что надо записать в MBR третьего диска(это главный вопрос!), чтобы этот третий диск самостоятельно опознался на другом системнике.
    /* Как в fasm генерировать bin файл с нулевым смещением, как писать asm файл так, чтобы сместиться на нужное смещение и пихать уже не код и данные? Насколько я помню, это org 0x1BE и затем пишу db число. Я прав? Про генерацию bin файлов вообще не помню. */
     
  10. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Antolflash
    1. Реально приличный дизассемблер для ИА-32 в природе существует всего один, и это IDA Pro. Где скачивать -- не знаю, это коммерческий продукт, так что гугл в руки. Синтаксис его, естественно, не фасмовский, а родной Интеловский, и выбора здесь нет.

    2. Упоминание смещения 1BE говорит о том, что Вы толком в теории не разобрались. МБР -- это весь загрузочный сектор, а не какая-то его часть, ну а с указанного смещения начинается таблица разделов, являющаяся частью МБР (см., например, http://wiki.osdev.ru/index.php/Главная_загрузочная_запись_(MBR)). Для программы-заглушки содержимое таблицы разделов абсолютно безразлично, для реального загрузчика, естественно, важно, но интересуют его лишь признак активного раздела и адреса разделов, а тип файловой системы безразличен -- в чём Вы и убедитесь, если дизассемблируете какой-нибудь МБР Винды.

    3. Повторю, что МБР -- это весь загрузочный сектор, а не его часть. Что же касается таблицы разделов, то проще поручить Винде или Линуху создать на том диске единственный раздел и отформатировать его под конкретную файловую систему, а в дальнейшем просто использовать информацию, помещённую ОС в таблицу разделов, ничего в ней не изменяя. Можно сделать то же самое и вручную, но для этого нужно знать число секторов на диске, а оно, естественно, меняется от диска к диску.

    Ну а что касается генерации бин-файлов, это уж сами разбирайтесь. Я ФАСМ не использую, и вникать в него у меня никакого желания нет.

    Кстати, это никакой не проЕкт программы, а план действий, которые Вы собираетесь предпринять. Проекта программы, т.е. пошагового описания того, какие действия будет выполнять эта программа, пока что не наблюдается (слова "который просто в цикле выводит символы на экран" являются описанием функций программы в самом общем виде, но не её проектом, поскольку не сообщают, как именно эти действия будут выполняться).
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    есть фришная 4.8
     
  12. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    С оф. сайта можно скачать бесплатную версию.
    Для дизассемблирования х86 она отлично подходит.
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.561
    Адрес:
    Russia
    Держите http://www.sendspace.com/file/660c13
    Давно откуда то брал. Для FAT12
    Форум прикреплять файлы не хочет.
     
  14. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    4.9
     
  15. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Вот hello world
     
  16. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Всем спасибо!
    TermoSINteZ, спасибо!
    Сел разбираться, хотя уже сейчас понял, что всё просто. Все процедуры записи раздела FAT записанны изходя из сего стандарта (читай - договорённости), и ничего сложного тут нет. Написанно, как я понимаю, на fasm. Что такое include "bootloader.inc" ?

    Treant, спасибо!
    Как я понимаю, для hello world при загрузки я могу даже не думать о таблице разделов, зачем вы тогда её написали (по моей просьбе, или она всё-таки нужна)?
    Код типа раздела вы взяли от балды?
    Смещение первого сектора логично, следующий сектор, тобишь 1.
    Количество секторов раздела тоже взяли от балды?


    Однако я тут открыл Питера Абеля, и в разделе о загрузочной записи, там вообще что-то другое
    00h - инструкция перехода к загрузщику - по адрессу 3Eh в этом же секторе
    03h - Имя версии DOS
    0Bh - кол-во байтов в секторе
    и т.д.
    3Eh - 1FFh - код загрузчика.

    И как это понять?


    Как я понимаю, я могу сейчас сгенерировать на фасме бинарник с этим hello world, пихнуть его даже на дискету, поставить в биосе грузиться с дискеты, и всё будет работать? А потом просто вытащю дискету и в биосе уберу загрузку с дискеты, и всё будет по старому?
     
  17. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Студийный IL Dasm не может открывать не PE файлы(. Придётся искать дизасемблер нормальный.
     
  18. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.561
    Адрес:
    Russia
    Antolflash
    include "bootloader.inc"
    Код (Text):
    1. macro struct name
    2.     { virtual at 0
    3.       name name
    4.       sizeof.#name = $ - name
    5.       name equ sizeof.#name
    6.       end virtual
    7.     }
     
  19. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
  20. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Antolflash
    Таблица разделов нужна, так как при ее отсутсвии BIOS может отказаться загружать MBR
    Код типа раздела тут важно, чтобы было не 0, а то тоже может не загружаться
    И количество секторов не важно сколько.