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

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

  1. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    как можно определить что находится в нулевом секторе. mbr или br.
    сначала я думал по полю bpb но я так понял что оно не у всех файловых систем есть.
    вот и думаю как?
    про то что по номеру диска, я знаю. но бывают ситуации когда например флешка отформатирована на одном компе(который ее видит как fdd) как fdd. а при использовании на другом определяется как hdd. вот и надо разобрать что там.
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    На глаз или программно?
     
  3. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    программно конечно.
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ну, файловая система распознается по константным значениям, которые должны присутствовать в структуре тома на строго определенном месте, по значениям, которые должны находиться в определенном диапазоне, определенном наборе значений или просто подчиняться каким-то правилам, по непротиворечивости таких значений друг другу, размеру пространства тома и т.п. Например, в FAT первый байт должен быть опкодом short jump или near jump (всякие cli/short jump считаются невалидными). поле размер сектора должно быть равно 512, поле сигнатуры должно содержать значение 29h и т.п. Для других ФС свои опознавательные признаки.

    Разбиение на разделы распознается только на цельном устройстве, когда "таблица разделов" описывает непересекающиеся разделы, не выходящие за пределы пространства устройства. Расширенные разделы распознаются по специфичным идентификаторам типов и структуре.
     
  5. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    про fat я знаю.
    вопрос больше в том. не какая файловая система. их много.
    надо скорее алгоритм определения mbr. просто по jmp и по 0aa55h(они и у BR).
    надо как-то по другому. если в PT несколько разделов то можно их сравнить и придти к выводам...
    а если раздел один? его несчем сравнить, а если совпадет с размером диска?
    с фат все просто. читаем в PT раздел и внем смотрим тип диска(в bpb тип 0f8h).

    но вопрос в том что у других (например ext2,3) нет поля bpb. у них вообще 0сектор может содержать что угодно.
     
  6. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    -можно сравнить сигнатуру 0aa55h
    -проверить первый байт не jmp и 0(хотя в mbr тоже может быть 0. и jmp могут впихнуть)


    или просто возложить ответственность на пользователя. чтоб он в биосе указал тип устройства.
     
  7. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Может опредлять MBR по признаку активности раздела (0x80 или 0x0) ?
     
  8. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    слушай а это идея) если сравнить во всех разделах признак активности с 0 и 80h. то вероятность совпадения почти нулевая) надо проверить)
     
  9. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    а если код mbr отсутствует а PT присутствует. сигнатура 0aa55h тоже должна быть? или она только как признак загрузочной записи, а не PT?
     
  10. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Номер диска вам ровным счетом ничего не скажет, вы правильно заметили.
    Если в 0м секторе устройства сидит MBR или BOOT сектор, то сигнатура 0x55 0xAA должна присутствовать.

    Универсального способа, выяснить, что сидит в 0м секторе не существует.
    Единственно, можно проверить наличие таблицы разделов, и то не наличие самой ТР, а правильность ее заполнения.
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Я допускаю присутствие нескольких разделов, помеченных, как активные. Можно проверять отсутствие в соответствующем поле каждого из четырех дескрипторов значения в диапазоне 1-7Fh.
     
  12. Phantom_84

    Phantom_84 New Member

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

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Ну тут вопрос взглядов. Для соблюдения совместимости, должно быть не более 1 раздела с отрицательной (>=0x80h) меткой. А если очень сильно озаботится вопросом совместимости, то должно быть не более одного 0x80 значения, остальные только нули.
    В частности MS вообще считал долгое время, что первичный раздел может быть только один, он должен быть помечен 0x80, и только на устройстве 0x80. На вторичном винте он вообще не позволял создать первичный раздел. Все остальные разделы по его мнению должны были быть прописаны в расширенной зоне.
     
  14. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Согласен, что вопрос взглядов. В моем софте активным считается раздел, дескриптор которого содержит признак активного раздела и находится в таблице перед другими аналогичными дескрипторами.
     
  15. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    А вообще, как говорится правильно поставленный вопрос, содержит 90% правильного ответа.
    А вот правильно поставленного вопроса тут нет. С какой целью топик стартер анализирует содержимое нулевого сектора? Какую цель пытается достичь?
     
  16. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    а почему только 1-7fh, а где 81h-0ffh. должно же быть только 80h или 0?
    я не где не встречал активного например 82h.

    и причем тут признак активного и диск. я же пишу флаг а не 80h-типа диск 80h?
     
  17. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Соседний топик почитай... про хитрость M$, касающуюся этого значения.
     
  18. abcd008

    abcd008 New Member

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

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    А по разному интерпретируют байт флага.
    1я трактовка, это значимый весь байт, и 0х80 указывает на активный раздел.
    2я трактовка, это значимый старший бит указывающий на признак активного раздела, а остальные биты зарезервированы.
    3я трактовка, это значимый старший бит указывающий на признак активного раздела, а младшие биты указывают на номер устройства.

    А BIOSом номера устройства несколько по другому, там старшие биты, это тип устройства, а младшие номер устройства.

    Вот и получается совпадение, что 0х80 и номер первого винта, и флаг раздела. Я видел коды от МС где для адресации устройства в BIOS используется значение флага.
     
  20. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    да но там они только с 80h и работают. потому-что я не встречал отличных от 80 значений. даже когда манял диски местами.
    или вы хотите сказать что если диск имеет номер 84h(например), то и флаг тоже 84h.
    это же не правильно диск можно переместить в биосе. и его номер изменится.
    а насчет бита 80h я видел что MS так проверяет. но я думаю это только для сокращения кода. так получается на одно условие меньше)

    в моем mbr куча проверок и текста. и он только-только влез в 430 байт( потом 4 байта 0 и 4 сигнатура и PT)