OSDev http://osdev.su/ |
|
ОС для нереального режима http://osdev.su/viewtopic.php?f=5&t=327 |
Страница 2 из 3 |
Автор: | KIV [ 06 июл 2010, 18:30 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
Цитата: BIOS использует cs, ds и es. Они должны быть строго 16-битными, поэтому продолжай использовать регистры fs и gs. И что? В реальном режиме процессор НЕ трогает лимиты сегментов. Меняется только база. Соответственно если я загружу в DS сегмент с базой 0 и лимитом 4 ГБ, а потом перейду в реальный режим и помещу в него 0x1000, то я получу сегмент с базой 0x10000 и лимитом по-прежнему 4 ГБ. BIOS, поскольку наивно предполагает, что все сегменты 16-битные не будет использовать расширенные регистры для доступа к данным через них, а только 16-битные. Соответственно обратиться к данным выше 64 КБ не сможет.Так что использовать можно любые сегментые регистры кроме CS. А BIOS как уже сказали выше использует SMM и никакие нереальные режимы ему не нужны. Кстати, а почему бы не обращаться к USB и проверять пароль, брелок и пр. уже после выбора ОС? Тогда то, что отвалится клавиатура будет уже всё равно, поскольку сразу же стартует ОС и берёт контроль над USB в свои руки. Не думаю, что список ОС настолько секретная информация, чтобы для её просмотра требовался пароль. |
Автор: | Himik [ 06 июл 2010, 20:18 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
KIV, насчёт ds и es согласен. Я посмотрел исходники DOS драйвера XMS himem.sys, там тоже используются ds и es. |
Автор: | Хрен [ 07 июл 2010, 10:03 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
phantom-84, а каким образом у тебя клавиатура в PM работает, если в PM даже обработчики прерываний уже совсем не те, которые находятся с 0 по 0x400, а те, которые описаны в IDT? Или ты с ней не по прерываниям работаешь? Хотя, в принципе, не важно, контроллер-то всё равно ресетить. В нереальном режиме можно и на C без особых проблем писать. Просто придётся поразбираться чуть. Всё-таки, под тем же DOSом писали не только на ассемблере, и всё работало ;) KIV, а каким образом мы это сделаем? Полезем в загрузчик той же винды? Рискованно слишком, можно и наворотить чего. Системы-то разные... |
Автор: | KIV [ 07 июл 2010, 11:59 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
Цитата: а каким образом мы это сделаем? Полезем в загрузчик той же винды? Рискованно слишком, можно и наворотить чего. Системы-то разные... Я имел ввиду, что загрузчик уже знает список операционных систем. Он показывает меню. Пользователь выбирает ОС. А потом у него просят пароль, белок или что там надо. Если не подходит ключ/пароль, то сообщаем об ошибке ребутимся, а если подходит, то загружаем по адресу 0x7C00 уже загрузчик той же винды и передаём ему управление. Начальному загрузчику ОС не нужна (если там не будет предложен выбор ещё ОС) поддержка клавиатуры и он спокойно загрузит ядро, перейдёт в PM, а дальше уже и сама ОС сможет разобраться с USB без BIOS. Цитата: а каким образом у тебя клавиатура в PM работает, если в PM даже обработчики прерываний уже совсем не те, которые находятся с 0 по 0x400, а те, которые описаны в IDT? Или ты с ней не по прерываниям работаешь? USB мышь и клава могут работать в как бы сказать режиме совместимости. У процессора есть специальный режим - SMM (System Managment Mode). Он переходит в него только по сигналу внешних усройств. Например, USB, который имеет опцию вызова кода SMM при сообщениях от USB клавиатуры и мыши. Код SMM хранится в памяти недоступной без дополнительных действий и соответственно не будет разрушен без вашем особенного желания. А этот код SMM пользуюсь возможностью контроллера 8042 помещает в его буфер код клавиши и вызывает IRQ0. Для ОС это выглядит абсолютно прозрачно. |
Автор: | Хрен [ 07 июл 2010, 15:52 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
Допустим, даже можно попробовать обойти загрузчик. Но что делать с виндовым ntldr, который может предложить выбрать режим загрузки системы? Там мы уже врядли что-то сделаем. А SMM есть пока ещё далеко не везде. Во многих системах обработкой USB Legacy занимается именно BIOS, который, если у него забрать управление и сбросить контроллер, не будет уже делать повторную инициализацию. |
Автор: | SII [ 07 июл 2010, 15:57 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
SMM есть везде, начиная с процессора 80386SL. Только вот перехватить его далеко не везде можно, да и не нужно: программы этого режима (являющиеся частью БИОС) тесно завязаны на особенности аппаратуры материнки, и некорректным вмешательством запросто можно что-нибудь пожечь нафиг (например, не переключить вовремя фазы питания и т.п.). |
Автор: | phantom-84 [ 07 июл 2010, 18:40 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
Хрен писал(а): phantom-84, а каким образом у тебя клавиатура в PM работает, если в PM даже обработчики прерываний уже совсем не те, которые находятся с 0 по 0x400, а те, которые описаны в IDT? Или ты с ней не по прерываниям работаешь? Хотя, в принципе, не важно, контроллер-то всё равно ресетить. Уже ответили.Хрен писал(а): В нереальном режиме можно и на C без особых проблем писать. Просто придётся поразбираться чуть. Всё-таки, под тем же DOSом писали не только на ассемблере, и всё работало ;) Не все современные компиляторы могут генерировать 16-разрядный код.
|
Автор: | phantom-84 [ 07 июл 2010, 18:51 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
Хрен писал(а): Допустим, даже можно попробовать обойти загрузчик. Но что делать с виндовым ntldr, который может предложить выбрать режим загрузки системы? Там мы уже врядли что-то сделаем. В режиме администратора всегда можно перенастроить или даже переписать загрузчик. Здесь уже следует использовать защиту на уровне ОС. А реализовать выбор загружаемой ОС ты можешь либо в рамках твоей программы, либо использовать сторонний софт, который не позволял бы пользователю изменить конфигурацию из загрузочного меню.
|
Автор: | Himik [ 07 июл 2010, 20:52 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
Видимо, после работы с ключём, придётся установить свой RM обработчик прерываний клавиатуры вместо стандартного BIOS, и возможно заменить ещё пару основных клавиатурных функций BIOS. Переделать драйвер клавиатуры из PM в RM наверно будет не сложно. |
Автор: | phantom-84 [ 08 июл 2010, 09:29 ] |
Заголовок сообщения: | Re: ОС для нереального режима |
Я считаю, что подменять код BIOS опасно, в том числе и из-за сложностей с сокрытием резидентного кода от загружаемого софта, который в праве расчитывать на свое единоличное присутствие. Если поддержку клавиатуры со стороны BIOS требуется сохранить в любом случае, то все-таки нужно поэкспериментировать с софт-ресетом. Объясняю суть. Загрузчик (например, MBR-) проверяет флаг перезагрузки BIOS. Если он установлен, то продолжает загрузку обычным способом. Если нет, то догружает код для работы с ключом и передает ему управление. Этот код проверяет наличие ключа и в случае успеха устанавливает флаг перезагрузки и выполняет софт-ресет (передает управление BIOS для повторной инициализации). |
Страница 2 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |