> man operating_systems
Центр информации по операционным системам :: Форумы :: Программирование :: Низкоуровневое программирование
 
<< Предыдущая тема | Следующая тема >>
Вот она была и вот ее нет - страничная память
Переход на страницу  [1] 2
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
Roman I Khimov
Пятница 28.01.2005 23:12

ID пользователя #1
Зарегистрирован: Воскресенье 27.06.2004 12:37
Местонахождение: Санкт-Петербург
Сообщений: 601
Руководств, статей, обсуждений в форумах насчет того, как пробраться в защищенный режим x86 и включить страничную память, в общем-то немало. Однако, меня вот заинтересовал другой вопрос - как отключить страничную память на рабочей системе и потом включить ее снова?

Мы тут сделали маленький модуль для ядра Linux, он при загрузке инвертировал 31 бит cr0, вроде бы аккурат отключал странички. Результат был супер - получился модуль перезагрузки машины. У меня возникло такое чувство, что все из-за EIP, который после отключения страниц начинает указывать пальцем в небо и либо натыкается на несуществующий в памяти адрес, либо читает из него такое, что проще сразу умереть.

А ведь вроде бы в 98 была опция перезагрузки в MS-DOS, которая не требовала полной перезагрузки, то есть вроде бы можно отрубить странички и выйти из защищенного режима.

Вопрос - как? Может кто-нибудь с таким сталкивался?


Греби и улыбайся!
Наверх
Сайт
vilmor
Суббота 29.01.2005 13:31
ID пользователя #140
Зарегистрирован: Пятница 29.10.2004 17:09
Местонахождение: Tomsk, Russia
Сообщений: 35
Надо соблюдать следующие условия:

1. Переключающий код должен находиться в одной и той же физической странице памяти, как до, так и после переключения бита PG.

2. Сразу после изменения бита PG, необходимо сделать межсегментный JMP для очистки буфера декодированных инструкций, поскольку после переключения могли смениться физические адреса следующих команд.

По поводу Win9x и DOS.
Совсем не очевидно, что при входе в DOS выключается страничное преобразование. Простые опыты показывают, что если загружен EMM386, то DOS работает в VM86, даже если EMM386 был запущен с опцией noems. Если же ему было позволено эмулировать EMS, то это точно означает, что страничное преобразование включено, даже в DOS.
Наверх
Сайт
Chizh
Воскресенье 30.01.2005 18:24
ID пользователя #90
Зарегистрирован: Понедельник 13.09.2004 18:42
Сообщений: 170
Советую бросить копать ядро (покуда неизвестна применённая в нём логистика). Лучше используй его функции.
Наверх
Сайт
Chizh
Воскресенье 30.01.2005 18:36
ID пользователя #90
Зарегистрирован: Понедельник 13.09.2004 18:42
Сообщений: 170
vilmor написал(а) ...
2. Сразу после изменения бита PG, необходимо сделать межсегментный JMP для очистки буфера декодированных инструкций, поскольку после переключения могли смениться физические адреса следующих команд.
Это указано в документации?
Наверх
Сайт
Roman I Khimov
Воскресенье 30.01.2005 18:44

ID пользователя #1
Зарегистрирован: Воскресенье 27.06.2004 12:37
Местонахождение: Санкт-Петербург
Сообщений: 601
vilmor, я, честно говоря, без кода себе это слабо представляю.

Alexander написал(а) ...
Советую бросить копать ядро (покуда неизвестна применённая в нём логистика). Лучше используй его функции.

Использовать ладно, всегда можно успеть, но вот это было действительно интересно. Вообще, нам просто хотелось прочитать маленько информации по физическому адресу (из cr3 , вот и родилось такое предложение - отключить странички и потом снова включить.

Хотя, в ядре есть функции phys_to_virt и virt_to_phys, можно бы и их попробовать, конечно... Но как-то в сравнении со страничным вариантом больно просто.


Греби и улыбайся!
Наверх
Сайт
Dron
Понедельник 31.01.2005 12:06


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
А зачем его выключать???
Это ж изврат... так вот по живому резать...

Одну из двух вечных российских проблем можно, в принципе, решить с помощью асфальтоукладчиков и катков. А вот с дорогами, конечно, будет труднее...

Андрей Валяев
Наверх
Сайт
Chizh
Понедельник 31.01.2005 12:42
ID пользователя #90
Зарегистрирован: Понедельник 13.09.2004 18:42
Сообщений: 170
Dron написал(а) ...
А зачем его выключать???
Это ж изврат... так вот по живому резать...
В натуре. Можно отобразить чего-нибудь.
Наверх
Сайт
Roman I Khimov
Понедельник 31.01.2005 13:25

ID пользователя #1
Зарегистрирован: Воскресенье 27.06.2004 12:37
Местонахождение: Санкт-Петербург
Сообщений: 601
По живому. Изврат. Но интересно.


Греби и улыбайся!
Наверх
Сайт
vilmor
Понедельник 31.01.2005 18:06
ID пользователя #140
Зарегистрирован: Пятница 29.10.2004 17:09
Местонахождение: Tomsk, Russia
Сообщений: 35
Alexander написал(а) ...
Это указано в документации?

Да, в документации по i486, п. 10.4.2.

Roman I Khimov написал(а) ...
vilmor, я, честно говоря, без кода себе это слабо представляю.

для NASM:
<div class='indent'>%define FLAT_CODE_SELECTOR 8 ; your code selector here
bits 32
section .text
mov eax, cr0
and eax, 0x7FFFFFFF
mov cr0, eax
jmp FLAT_CODE_SELECTOR : next
next:</div>Вообще, такой способ едва ли быстрее virt_to_phys. поскольку операции с cr0 весьма медленные. К тому же, риск получить прерывание или исключение в момент отключённого PG - все таблицы и обработчики будут указывать в никуда. Плюс проблема разместить код переключателя по тому же линейному адресу, что и по физическому... игра не стоит свеч.
Наверх
Сайт
vilmor
Понедельник 31.01.2005 18:12
ID пользователя #140
Зарегистрирован: Пятница 29.10.2004 17:09
Местонахождение: Tomsk, Russia
Сообщений: 35
Извиняюсь, не мог раньше ответить
PS: HTML-разметка у меня почему-то работает только в preview
Наверх
Сайт
Переход на страницу  [1] 2  

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.