Plop Boot Manager

Тема в разделе "WASM.OS.DEVEL", создана пользователем MisHel64, 15 июл 2011.

  1. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Господа, помогите разобраться.
    Имеется Plop Boot Manager установленный на жесткий диск. Все работает отлично. MBR сектор в аттаче.
    Смысла в 90% кода откровенно не понял, но суть не в этом.
    Главное, что код из MBR Plop'a загружает 0x23 сектора в память 0x2000:0x0100 начиная с CHS:0/0/3 сектора. И делает туда длинный JMP.
    Я пишу свой код в MBR, который считывает 0x23 сектора в память 0x2000:0x0100 начиная с LBA:2 сектора. И делает туда длинный RET.
    Но Plop не стартует под моим загрузчиком.
    Посмотрите, плиз, что я упустил?

    PS:
    Устанавливаю Dl=0x80h, ES=0x2000, Стек на 0x0000:0x7C00h результат 0й.
    Проверку на наличие своего кода в MBR Plop не делает, проверенно.
    Мой загрузчик работает правильно, и делает все выше описанное, проверено.
    Но чего не хватает plop'y не понимаю.
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Наличие длинного JMP наводит на мысль, что там может быть переход в нереальный или защищенный режим. Положи MBR от plop. В чем смысл использования именно plop. Grub4dos менее глючный и позволяет грузить plop из своего меню.
    ++++++++++++++++
    Посмотрел я HW0_PLP.BS Там все прозрачно. JMP без всяких фокусов. Теперь желательно увидеть ваш загрузчик. Особенно длинный ret
     
  3. Phantom_84

    Phantom_84 New Member

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

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Phantom_84
    Там нет ничего подозрительного. Чтение секторов и прога для вывода сообщения "ошибка загрузки".
    Есть еще одно подозрение. Возможно MisHel64 забыл сохранить в MBR таблицу разделов.
     
  5. MisHel64

    MisHel64 Member

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

    Именно он лежит в аттаче к первому посту.

    Использование Grub4Dos для загрузки plop считаю избыточным способом. Можно конечно пойти по такому пути, но использовать адекватный boot менеджер, а не Grub4Dos, но это сравнимо с удалением гланд через анальное отверстие.

    Код (Text):
    1. Push DWord ptr Ds:[Di+4]
    2. Ret
    DS:lol: I указывает на пакет для Int 0x13/0x42
    Ret внутри FAR процедуры разворачивается RetF (0xCB)

    Прежде чем писать суда, я проверял свой код. Чтение и переход действительно происходит в указанное место.
     
  6. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Такая мысль мне то же приходила, и казалась единственно правильной. Но проверка показала, что это не так. Хотя на проверку этой мысли я убил почти сутки.
    Немного посмотрев код самого PLOP, ошибка стала очевидной, и допущенной автором PLOP.
    В своем коде он делает
    Код (Text):
    1. Xor Al, Al
    2. ..
    3. LodsB
    4. ..
    5. Mov Cx, Ax
    6. ...
    7. LOOP XXXX
    И использует CX, для формирования некой структуры.
    В реальной жизни, эта ошибка никогда не всплывет. Потому, что после вызова INT 0x13 в MBR, Ah будет равен НУЛЮ.
    Пропатил код PLOP, заменив Xor Al, Al на Xor Ax, Ax
    И добавил XOR Ax, Ax в свой загрузчик. И проблема решилась.

    Всем спасибо.
     
  7. abcd008

    abcd008 New Member

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

    Phantom_84 New Member

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

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Самомодифицирующийся код - видимо чтобы антивирусы не ругались :)
     
  10. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    стандартные функции описаны в спецификациях edd. и я обычно им доверяю. инче зачем ими пользоваться если не веришь в результат который они вернут?
     
  11. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Лично, я считаю, что правилом хорошего тона, было бы обработать код возврата.
    И проверить, не только код возврата, но и посмотреть, что же именно было прочитано.

    К edd используемая функция не имеет никакого отношения.
     
  12. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Это было в общем:
    А это в частности:
    Лучше скажи, каким идиотом нужно быть, чтобы сделать xor al,al вместо xor ax,ax, учитывая то, что функция BIOS, вызываемая, вообще-то говоря, не в данном исполняемом модуле, вернет ah=0.

    В EDD 4 собираются впихнуть в том числе и описание старых функций.

    Давайте не будем на пустом месте... повышать активность общения в форуме. Два реальных вопроса, касающихся в общем-то не очень примечательного кода, я обозначил: 1) не понятно, как обрабатывается возникновение возможной ошибки, и обрабатывается ли вообще; 2) зачем здесь нужен самомодифицирующийся код, тем более такой мутный - умные люди меня учили никогда не модифицировать близлежащие инструкции без дальнего перехода - может, в неочевидности его работы и заключена вся фишка, хотя навряд ли. Короче предлагаю поразмышлять над этим самостоятельно.
     
  13. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Phantom_84
    1) Никак. Вообще ни как.
    2) Мое мнение об аффторе, как о программисте, после просмотра только кода в MBR было не высоким. А после просмотра кода программы упало ниже плинтуса.