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

Ваш аккаунт

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

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

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

ia32(x86 : 486, 586, ...): команда - кандидат для условного исключения в ring3

11K
18 мая 2011 года
Огненный
15 / / 01.11.2005
Есть идея отмечать в программе точки предпочтительных прерываний. Это можно организовать в виде специфической системной функции (расположенной на специальной выделяемой странице памяти) с псевдокодом:

 
Код:
bool should_interrupt = false;
 void interrupt_point()
{
if (should_interrupt) syscall(USER_INTERRUPT_POINT);
}

Тогда соответствующая точка предпочтительного прерывания в коде будет помечаться вызовом:

 
Код:
interrupt_point();


Но хотелось бы более элегантного решения в виде:

 
Код:
asm("XOPCODE");


Вопрос только в том: "Что написать вместо XOPCODE ?"

Примечание:
(1) Значение переменной should_interrupt устанавливается ядром операционной системы.
277
18 мая 2011 года
arrjj
1.7K / / 26.01.2011
CALL interrupt_point ?
11K
18 мая 2011 года
Огненный
15 / / 01.11.2005
Наверное я недостаточно хорошо объяснил задачу ...

(1) Псевдокод в слиле C/C++ имеет ориентировочное значение - ищется именно ассемблерное решение, лучшее того, что описано в псевдокоде (другими словами - замена "CALL interrupt_point").

(2) Команда процессора "XOPCODE" (или серия команд)
- при одной комбинации флагов (управляющих регистров процессора, но в ring3) выполняться без исключений;
- при другой комбинации флагов (...) вызывает исключение.

P.S.

Кандидатурой может быть простое "MOV (0xf0000000), eax" :
- если к данному адресу подключена страница с правами write,то просто в начало будет записано значение eax;
- если страница не будет подключена - PAGE_FAULT (остаётся только отловить обращение именно к этому адресу)

Но опять таки хотелось бы чего-то более специализированного. Может быть "INT", "INTO"?
14
18 мая 2011 года
Phodopus
3.3K / / 19.06.2008
Неплохо бы вообще указать программное окружение
260
19 мая 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Огненный
Есть идея отмечать в программе точки предпочтительных прерываний. Это можно организовать в виде специфической системной функции (расположенной на специальной выделяемой странице памяти) с псевдокодом:

 
Код:
bool should_interrupt = false;
 void interrupt_point()
{
if (should_interrupt) syscall(USER_INTERRUPT_POINT);
}

Тогда соответствующая точка предпочтительного прерывания в коде будет помечаться вызовом:

 
Код:
interrupt_point();


Но хотелось бы более элегантного решения в виде:

 
Код:
asm("XOPCODE");


Вопрос только в том: "Что написать вместо XOPCODE ?"

Примечание:
(1) Значение переменной should_interrupt устанавливается ядром операционной системы.



Написан бред, ибо: прерывание и исключение две разные вещи, брякпоинты никто не отменял, да и вообще термин "точки предпочтительных прерываний" не существует. А вдруг автор говорит про реентерабильность?...

PS: Сформулируйте пожалуйста задачу, а не выдвигайте идей для решения абстрактного даже не коня в вакууме.

11K
19 мая 2011 года
Огненный
15 / / 01.11.2005
Цитата: "Сформулируйте пожалуйста задачу"

Ответ:

Существует ли (если существует, то какова (каковы))
Цитата:

"
(2) Команда процессора "XOPCODE" (или серия команд)
- при одной комбинации флагов (управляющих регистров процессора, но в ring3) выполняться без исключений;
- при другой комбинации флагов (...) вызывает исключение
.
"

Цитата: "Неплохо бы вообще указать программное окружение"

Экспериментальная операционная система, например http://en.wikipedia.org/wiki/KolibriOS

Цитата: "прерывание и исключение две разные вещи, брякпоинты никто не отменял, да и вообще термин "точки предпочтительных прерываний" не существует"

Здесь Вы правы, терминологически в идентификаторе набор символов
"interrupt"
правильнее было бы заменить на "switch_context"

Для введения термина "точки предпочтительных прерываний" и ведётся поиск подходящего способа реализции.

В чём смысл этого термина? Например:

- точка вне критической секции,
- точка, переключение контекста в которой не требует сохранения (всех, или определённой части) регистров процессора,
- контрольная точка, по набору которых можно собирать статистику, контролировать тот факт, что процесс не зациклился,
...

P.S.

Вообще-то вопрос по системе команд процессоров линейки x86, при чём тут программное окружение, конкретная задача? Всё остальное я привёл просто для пояснения ...
260
19 мая 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Огненный

- точка вне критической секции,
- точка, переключение контекста в которой не требует сохранения (всех, или определённой части) регистров процессора,
- контрольная точка, по набору которых можно собирать статистику, контролировать тот факт, что процесс не зациклился,
...



- Синхроннизация
- Частичное сохранение контекста, например без FPU, необходима аппарадная поддержка
- Детектирование дедлоков, вачдоги и иже с ними

Все это разные задачи с разными решениями.
Итого: Учим мат часть прежде чем заниматься "экспериментальными" операционными системами

PS: ну и как бонус "условный переход в правильное место", ну а если уж очень хочется access violation'а - CMOV по "правильному" адресу, остльные варианты можете и сами понапридумывать со всякими маджиками в регистрах у брекпоинта и тд.

14
19 мая 2011 года
Phodopus
3.3K / / 19.06.2008
cmov ему не покатит по начальным условиям на процы
260
20 мая 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Phodopus
cmov ему не покатит по начальным условиям на процы



Ну зачем же вы обламываете, это было задание на дом. =T_T=

252
23 мая 2011 года
koderAlex
1.4K / / 07.09.2005
нихрена не понял пожеланий клиента.. (
14
24 мая 2011 года
Phodopus
3.3K / / 19.06.2008
Ну тут многие не очень поняли :). Я, например, не вижу особой разницы между INT и CALL.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог