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

Ваш аккаунт

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

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

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

Передача управления непривилигированному коду

399
22 января 2009 года
KIV
432 / / 20.01.2009
Как передать управление непривилигированному коду в защищённом режиме?
261
23 января 2009 года
ahilles
1.5K / / 03.11.2005
в защищённом режиме нельзя передать управление менее привилегированному коду, возможно только вернуться в менее привилегированный код.
349
23 января 2009 года
Phantom-84
656 / / 27.10.2005
...что по сути одно и тоже. Например:
 
Код:
push ADATA ; usermode data/stack selector (RPL=3)
  push UserModeStackPointer
  push ACODE ; usermode code selector (RPL=3)
  push UserModeInstructionPointer
  retf
399
23 января 2009 года
KIV
432 / / 20.01.2009
То есть после retf процессор сам настроит SS и ESP? Насколько мне известно retf изменяет только CS и EIP
1.9K
24 января 2009 года
disasm
232 / / 06.02.2006
Насколько я знаю, при возврате из другого кольца, регистры ss,esp восстанавливаются из таблицы TSS
349
24 января 2009 года
Phantom-84
656 / / 27.10.2005
Твои знания в этом вопросе неверны. SS:ESP выбирается из TSS при передаче управления более привилегированному коду и как раз во время этой передачи в привилегированном стеке сохраняется SS:ESP исходного стека, а при возврате восстанавливается.
399
24 января 2009 года
KIV
432 / / 20.01.2009
Я уже узнал про это. Но всё равно происходит ошибка. Я тестирую на вирутальной машине Bochs, он сообщяет об ошибке извлечения SS и ESP из TSS.
349
24 января 2009 года
Phantom-84
656 / / 27.10.2005
код покажи.
399
25 января 2009 года
KIV
432 / / 20.01.2009
Код перехода на непривилигированный код
 
Код:
pushd 35 ; Селектор данных
pushd 0x1FFC ; База у сегмента 2 МБ
pushd 27 ; Селектор кода
pushd 0 ; База у сегмента 2 МБ
retf

Описание сегмента кода 3-его кольца
 
Код:
dw 0xFFFF,0
db 0x20,11111010b,0xCF,0

Описание сегмента данных 3-его кольца
 
Код:
dw 0xFFFF,0
db 0x20,11110010b,0xCF,0
399
25 января 2009 года
KIV
432 / / 20.01.2009
Это при отключенной страничной адресации. При включенной происходит page fault (CR2 = 0x200000). При условии, что страница подключена к этому адресу. Может я что то напутал с флагами для этой страницы для установил 0-ой, 1-ый и 2-ой биты. Или для разрешения доступа пользователя к страницы используется не 2-ой бит (в других ошибки скорее всего нет - при доступе из привилигированного кода page fault не случается). Bochs пишет последнюю инструкцию. В случае со страничной адресацией она является первой инструкцией в пользовательском сегменте кода. Выполнится она не успевает (в режиме отладки это видно - retf и сразу же ошибка).
349
25 января 2009 года
Phantom-84
656 / / 27.10.2005
По тому, что ты показал, ошибку выявить трудно. Ты уверен, что дескрипторы прикладных сегментов находятся на нужном месте в GDT? Может, все-таки первая команда прикладного кода приводит к ошибке. Еще вариант... если у тебя прерывания не запрещены, а SS0:ESP0 в текущей TSS не настроен, то первое же прерывание при выполнении непривилегированного кода приведет к ошибке.
399
25 января 2009 года
KIV
432 / / 20.01.2009
Я кое-что переделал и теперь page fault не происходит. Сегменты расположены правильно, это точно. Прерывания разрешены. Попробую настроить ss0:esp0.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог