Защищённый режим

Discussion in 'WASM.BEGINNERS' started by Dima_, Nov 4, 2006.

  1. Dima_

    Dima_ New Member

    Blog Posts:
    0
    Такая проблема: при переходе из реального режима в защищённый комп просто перезагружается. Вроде GDT сформировал верно, загрузил её, отключил все маскируемые и немаскируемое прерывания. Дебагером смотрю - после команды mov cr0,ax, где битик РЕ =1 машина перезагружается. После команды mov, как и положено, дальний переход.
    Подскажите, пожалуйста, в чём тут загвоздка.
     
  2. _Serega_

    _Serega_ New Member

    Blog Posts:
    0
    А какой дебаггер (кроме ВОШЬ :) ), переносит вход в защ. режим?
     
  3. nermest

    nermest New Member

    Blog Posts:
    0
    а точно ли после mov cr0, eax ?
    попробуй поставить jmp $ после модификации cr0. Если комп зависнет, то у тебя проблемы с прыжком в сегмент защещенного режима.
     
  4. Dima_

    Dima_ New Member

    Blog Posts:
    0
    Что за ВОШЬ?
     
  5. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Dima_
    Наверно БОРШЬ(Bochs)? Но помойму лучше головой думать.
     
  6. _Serega_

    _Serega_ New Member

    Blog Posts:
    0
  7. _Serega_

    _Serega_ New Member

    Blog Posts:
    0
    100 % в точку!! и при этом на бумаге записывать умные мысли. Еще желательно чтоб компов в радиусе 20 км. небыло, дабы соблазнов сделать задачу методом научного тыка исключить... и только IA vol1-3 под рукой иметь.
     
  8. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    _Serega_
    Просто мне Borsh как отладчик не сильно помог. А из эмулятор больше VMWare предпочитаю.
    А насчет ошибки. Это либы не верно расчитан JMP, селектор не правельно задан или смещение не верно посчитанно.
    Или ошибка в lgdt, GDTR опять таки все в расчет адресса уперается.
    Ошибка может быть и после JMP опять по тойжей причине.
     
  9. Mika0x65

    Mika0x65 New Member

    Blog Posts:
    0
    Этого мало -- программные особые случаи/ловушки все равно остаются разрешенными и при их возникновении используется IDT. Если хотите разобраться сами -- заполните таблицу прерываний от 0 до 18 (лучше от 0 до 31) с выводом информации об ошибке и выполните переход. Про необходимость jmp уже сказали.

    Если не поможет -- выложите исходник.
     
  10. Dima_

    Dima_ New Member

    Blog Posts:
    0
    А отлаживать по-твойму прогу не надо?
     
  11. _Serega_

    _Serega_ New Member

    Blog Posts:
    0
    Обычно сразу работает :)!! чессн слово !!
     
  12. Dima_

    Dima_ New Member

    Blog Posts:
    0
    Спасибо за совет. Всё заработало. Проблема и правда была в jmp - чуть-чуть ошибся формируя GDTR и соответственно прыгать некуда.
     
  13. n0name

    n0name New Member

    Blog Posts:
    0
    _Serega_
    emu386 AFAIR тоде переносит =)