Запрет IRQ из потока приложения

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Запрет IRQ из потока приложения

Сообщение CRobin » 02.01.2017 16:12:11

Здравствуйте. Нашел статью, где автор приводит примеры кода на ASM для запрета всех видов прерываний. https://dev64.wordpress.com/2012/11/15/ ... xceptions/

Насколько я понимаю, прерывания запрещаются для того процессора, на котором происходит выполнение потока, из которого были вызваны эти инструкции, в результате чего приложение как бы изолируется от остальной системы и выполняется изолировано.
Вот пример такого кода:
Код: Выделить всё
; запрет всех прерываний
cli
in   al, 70h
or   al, 80h
out  70h, al  ; запрет NMI


Код: Выделить всё
; разрешаем аппаратные прерывания и NMI
in   al, 70h
and  al, 7Fh
out  70h, al
sti


С процессором можно попрощаться в этот момент до тех пор, пока поток сам не снимет запрет на получения прерываний CPU. Проблема в том, что приведенные в статье примеры ASM кода мне воспроизвести не удалось, как и разобраться в коде, поскольку мои знания для этого слишком поверхностны. Возможно кто то сталкивался с подобной проблемой запрета прерываний? Если я правильно понял ситуацию, можно ли реализовать эту логику при помощи асемблерных вставок на паскале?
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Запрет IRQ из потока приложения

Сообщение vitaly_l » 02.01.2017 16:51:12

CRobin писал(а):можно ли реализовать эту логику при помощи асемблерных вставок на паскале?


Код: Выделить всё
{$ASMMODE intel} // <=== Вверху модуля пишите вот такую команду

procedure myFunction(); assembler;
asm //  <=== после этой команды пишите Ваш код на assembler
in   al, 70h
and  al, 7Fh
out  70h, al
sti
end;


на форуме, полно примеров.


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Запрет IRQ из потока приложения

Сообщение CRobin » 02.01.2017 17:01:15

vitaly_l спасибо за совет, только попробуйте этот код сперва а) скомпилировать б) запустить.
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Запрет IRQ из потока приложения

Сообщение Лекс Айрин » 02.01.2017 17:23:59

Скорее всего, у тебя просто не тот синтаксис. Переключи на интеловский либо директивой {$ASMMODE INTEL} , либо в настройках проекта. Возможно, потребуется соответствующий ассемблер.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Запрет IRQ из потока приложения

Сообщение CRobin » 02.01.2017 17:38:56

Лекс Айрин вроде чувак пишет для 64битных процов. Все компилируется но при запуске возникает ошибка SIGSEGV. Я ж правильно понял, что это все должно работать для обычного приложения из юзерспейс?
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Запрет IRQ из потока приложения

Сообщение Лекс Айрин » 02.01.2017 18:07:44

зависит от оси.

В защищённом режиме, если её вызывает код, CPL которого численно больше IOPL, то процессор генерирует исключение #GP(0). Например, если IOPL = 2, то выполнять эту команду может код в 0, 1 и 2 кольцах защиты. Современные операционные системы устанавливают IOPL = 0, чтобы только ядро могло исполнять эту инструкцию.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Запрет IRQ из потока приложения

Сообщение CRobin » 02.01.2017 18:15:56

Лекс Айрин да, похоже прав не хватает для выполнения инструкций. Только на уровне ядра может выполнятся, на уровне приложения нет Изображение
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Запрет IRQ из потока приложения

Сообщение Лекс Айрин » 02.01.2017 18:34:53

вообще, по хорошему, в драйверах тоже должно. И я бы кольца немного по другому подписал.

ядро/драйвера/слой абстракции/приложения
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Запрет IRQ из потока приложения

Сообщение CRobin » 02.01.2017 20:27:01

Лекс Айрин ядро/драйвера/вирусы/приложения :D
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru