как отличить mbr от BR

Тема в разделе "WASM.OS.DEVEL", создана пользователем abcd008, 23 мар 2011.

  1. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Да мне что-то так показалось ночью.

    Я корректирую начальный адрес раздела в дескрипторе, когда это необходимо, чтобы он действительно был абсолютным, как и в дескрипторе первичного раздела.
    В смысле ты загрузил BS в память, и поменял там значения в "области данных BIOS"? Или прям на винте меняешь.
    Откровенно нет желания сейчас копаться по форматам BS для разных OS. Ты уверен, что для FAT12/FAT16/FAT32/NTFS/EXT2 этот "начальный адрес раздела" живет в одном и том же месте? Или ты проверяешь тип раздела предварительно?

    Мыло в профиле, пейджеры, что-то давненько не использую.

    И возвращаясь к ранее тобой написанному. Ты говорил, что у тебя универсальный код в MBR/BS живет. Вот этого я очень не понял. Расшифруй.
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    "Область данных BIOS" - это BDA. Я корректирую BPB. В памяти естественно. На винте это делать не вполне корректно (противоречит формату расширенного раздела типа 5 и вложенным в него разделам), более затратно и грозит дополнительными ошибками. Тип раздела естественно проверяю, текущее значение проверяю. В FAT/NTFS поле HiddenSectors находится по смещению 1Ch. Но этот загрузчик я пока не выкладывал, поэтому не нужно об этом много говорить. Возможно, со временем поддержку расширенных разделов я включу и в Alter.

    Не совсем так. abcd008 сказал, что использует указатель DS:SI в первичном загрузчике. Я сказал, что откуда он его возьмет, если первичный загрузчик установлен на цельном устройстве (не разбитом на разделы диске), и что у меня первичные загрузчики могут устанавливаться и в раздел, и на цельное устройство - да, по сути в MBR, но это все равно не MBR-загрузчик, а обычный первичный загрузчик. Все благодаря Boot Spec. и этому фрагменту кода:
    Код (Text):
    1.   cmp byte [7DFFh],88h
    2.   je @f
    3.   mov dh,0
    4. @@:
     
  3. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    если вопрос в том каковы минимальные требования для того чтобы биос загрузил и передал управление коду, то как я помню - это наличие сигнатуры и (а может и не помню - активного раздела в таблице) какогонибудь кода

    вот пример (копирнул загрузчик от Грейта чтоб просто строку выводил) бинарный код (на выходе фасма) надо расширить до 512 и в конце добавить сигнатуру

    Код (Text):
    1. format binary
    2. use16
    3.  
    4.     jmp near start
    5.  
    6. BootSeg equ 07c0h
    7. _message db 'HELLO BOOT WORLD :)',0
    8.  
    9. start:
    10.     xor ax, ax
    11.     mov ss, ax
    12.     mov sp, 7c00h
    13.  
    14.     push    BootSeg
    15.     pop ds
    16.  
    17.     mov si, _message
    18.     call    FPrint
    19.     sti
    20.     jmp $
    21.  
    22. FPrint:
    23.     lodsb                 ; Get next character
    24.     or    al,al
    25.     jz    FPrintDone
    26.  
    27.     mov ah, 14           ; Write teletype
    28.     mov bx, 7            ; Attribute
    29.     int 10h         ; Print it
    30.  
    31.     jmp   FPrint
    32.  
    33. FPrintDone:
    34.     ret
     
  4. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    нет. здесь вопросы посложнее. и у половины из нас уже есть полноценные mbr. уже работающие.
    здесь скорее решаем нюансы.
     
  5. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    Не совсем так. abcd008 сказал, что использует указатель DS:SI в первичном загрузчике. Я сказал, что откуда он его возьмет, если первичный загрузчик установлен на цельном устройстве (не разбитом на разделы диске), и что у меня первичные загрузчики могут устанавливаться и в раздел, и на цельное устройство - да, по сути в MBR, но это все равно не MBR-загрузчик, а обычный первичный загрузчик. Все благодаря Boot Spec. и этому фрагменту кода:
    cmp byte [7DFFh],88h
    je @f
    mov dh,0
    @@:

    -а где эта спецификация. ты вроде говорил что сам ее придумал?
    а если вторичный загрузчик будет твой. а mbr оригинальный(MS). то получится что он не поймет что у тебя за BR у него же сигнатура не 55AAh, а 5588h(или AA88h неважно). получится что он не передаст ему управление?
     
  6. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    В общем это я и имел ввиду.

    Ой, а давай заранее договоримся вот это и подобное опускать.

    Сколько я помню твою терминологию, "первичное устройство".... У тебя обычный BOOT Сектор.
    Я думал универсальный, или комбинированный.

    Вот это место, чуть по подробней.

    sn0w Нет, вопрос далеко не в том.
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    В основном, я. Суть интерфейса между MBR-загрузчиком (stage 0) и первичным загрузчиком (stage 1) можно понять из этих выкроек (см. ниже). Второй интерфейс описывает взаимодействие первичного загрузчика и ядра/вторичного загрузчика. При необходимости буду цитировать и дальше.

    Ты так и не догнал... "Моя" ветка, пост #9.
    "Цельное устройство"? Универсальный загрузчик я так и называю. Здесь имеется в виду универсальность в плане своего размещения, а не совмещения функций двух различных загрузчиков.

    См. выше ))) Проверяю валидность значения, переданного в dh.
     
  8. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    То есть ты в конец сектора пихаешь не 55AA, а 5588?
    По моему тебе правильно намекают, что ты большие грабли себе зарываешь.
    Стоит сменить код в MBR на более другой, и загрузка с твоих разделов пойдет лесом.
    Да и BIOS может смело послать сектор с такой сигнатурой так далеко в лес, что станет грустно.
     
  9. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я допер сигнатура у него нормальная 55aah.
    а мбр при записи в dh-отличного от нуля числа (раздела),заменяет в загруженном образе BR (в памяти а не на диске) последний байт на 88h. Молодец) возьму на вооружение. а то я тоже разделы нумерую так же. но только передаю их пока ядру. а не мбэром в BR.
     
  10. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Во. "Молодец)" Только давайте все-таки писать 0AA55h (или 55h, 0AAh).

    Может быть и ноль (Boot Spec. это допускает). Когда от MBR-загрузчика передается в качестве валидного значения ноль, ядро будет считать загрузочным активный раздел. Точнее ядро сразу точно этого не знает, а определяет, т.к. 0 может означать две вещи - загрузку с цельного устройства или загрузку с активного раздела.

     
  11. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    а кто-нибудь читал multi boot specification.
    на разных сайтах пишут что линух и еще много подобных систем ей соответствуют.
    и загрузчик grub тоже.

    но проблема в том что не в grub(в одном нашол), а в линух вообще негде нет magic number 0xe85250d6
    я пробовал и местами менять, один фиг нету. вот и не пойме зачем призывать ей пользоваться, если сами не используют?
     
  12. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Эту поищи.
    Код (Text):
    1. MBH_MAGIC equ 0x1BADB002
     
  13. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    у меня две спецификации. одна 2009, другая 2010.
    и у них разные MAGIC. но не в том дело. я нашел эту сигнатуру только в grub.
    а в образе linux (и в исходниках) ее нет.
    мне бы пример какой, для полного понимания реализации.
     
  14. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    посмотрел исходники grub и linux.
    при тесте на активность раздела они делают
    flag and 7fh. и если 0 то не активный, а 80 то активный.
    то есть они пользуются проверкой бита а не числа.

    зато при создании и записи пишут точные числа 80 или 0(без операции or)
     
  15. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    вот мой MBR. кто хочет смотрите.
    заодно отпишитесь как работает.
    сам проверял на трех машинах, ошибок не нашел.
    некоторые фрагменты могут показаться странными, но все делалось для того чтоб код влез до 1AFh
    по документации можно и больше. но многие программы и системы редактируют пространство mbr с адреса 1b0h
    для своих нужд. но все что мне было надо, я впихнул)

    для лучшей наглядности код лучше смотреть из под DOS Navigator(в досе или винде)
    или AkelPad (виндовс)
    в обычном блокноте теряется выравнивание и плохо понимается текст.
     
  16. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    отзывы так и не вижу)
     
  17. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    ОК, посмотрю. Только давай так: я буду тестить твой загрузчик, а ты мой. Скоро в "своей" теме выложу для тестирования новую редакцию Alter'а с задержкой при ожидании. Мы пока сами ее тестим. В основном на ноутах )))
     
  18. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    ты исходник выложишь?
     
  19. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Нет. Только фрагмент, осуществляющий задержку. Если боишься за свой комп, можешь потестить на чужих )))
     
  20. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    чего боятся выложить исходник, если 512 байт можно отдебагить за 10 минут)