Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с переходом в ring0+paging

1.9K
07 февраля 2006 года
disasm
232 / / 06.02.2006
Вот у меня проблемка возникла. Работаю под FreeBSD, использую Bochs(один из последних). Моя ОСь в эмуляторе нормально впереходит в защищенный режим со страничной адресцией, а на реальном компе происходит перезагрузка.
Порядок действий в моей ОС(точнее в загрузчике ОС) таков:
1. загрузка IDTR, GDTR, (смещение таблицы GDT указываю равным
(0x00000000+
<то, куда загрузчик грузится>+
смещение в исходнике).
2. far jmp на 0x00000000+
<то, куда загрузчик грузится>+
<адрес метки PM1>
3. копирует ядро 0x00020000->0x00200000
4. ближний вызов процедуры, которая:
- инициализирует таблицы PDE и PTE
- прописывает PTE в двух местах в PDE: для
адреса 0x00000000 и 0xf0000000
- мэппит в PTE первые 3 мегабайта
5. загружает в cr3 адрес PDE
6. устанавливает флаг pg в cr0
7. far jmp на 0xf0000000+
<то, куда загрузчик грузится>+
<адрес метки PM2>
8. так как адреса вида 0x000... болше не нужны,
обнуляю первые 4 байта в таблице PDE


===== из-за этой команды камп резетится =====
9. far jmp на 0xf0200000


PS: Я еще не видел, чтоб на форуме НЕДЕЛЮ отвечали. Ну хоть скажите, как этот переход делается. Если можно, дайте код. Если можно - понятный.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог