Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Вадик_
7 / 7 / 4
Регистрация: 28.03.2014
Сообщений: 134
Завершенные тесты: 1
#1

Прерывания в ОСи: прототип функции-обработчика - C++

01.10.2015, 21:04. Просмотров 736. Ответов 6
Метки нет (Все метки)

Как реализовать прерывания на C++. Какой должен быть прототип функции-обработчика. Как делать выход из обработчика. Mожет callback надо делать? Я сделал так:
C++
1
2
3
4
5
6
void* handler()
{
__asm__ __volatile__("pushad");
printf("!!!");
__asm__ __volatile__("popad; leave; iret);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2015, 21:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прерывания в ОСи: прототип функции-обработчика (C++):

Прототип функции и аргументы - C++ Builder
Доброго времени суток есть некая функция для поворота текста void __fastcall RotateText( AnsiString Text, TCanvas *Canvas, int...

Прототип функции в заголовочном файле - C++ Builder
Всем привет. Если объявляю прототип функции в заголовочном файле, пишет ошибку: Unresolved external ... referenced from..., а когда пишу...

Прототип функции не виден внутри класса... - C++ Builder
Использую Rad Studio 2010 Для доступа к функции из DLL, описан прототип функции следующим образом: typedef void (_stdcall...

В какой области доступа класса разместить прототип функции? - C++ Builder
Всем привет! Не сталкивался на знаю, разбираю код Дельфи и там встретились прототипы функций. Объясните плиз, в какой части программы по...

Вызов обработчика кнопки из другого обработчика. - Visual C++
Есть кнопка, есть у ней обработчик, который делает нечто полезное. Как вызвать выполнения обработчика этой кнопки из обработчика другой...

Прототип функции - C++
Пожалуйста помогите!!! Написать программу для вычисления произведения ненулевых элементов, расположенные на четных строках массива...

6
Mikl___
Заблокирован
Автор FAQ
02.10.2015, 04:02 #2
Вадик_,
чтобы iret нормально отработал в стек нужно занести три параметра
текущее содержимое регистра флагов EFLAG (команда pushf)
текущее содержимое регистра CS (команда push cs)
и адрес возврата из прерывания (push адрес_возврата)
но под Windows система не даст вызвать прерывание пользователя, только под "чистым" DOS или, на худой конец, в режиме эмуляции DOS
0
Вадик_
7 / 7 / 4
Регистрация: 28.03.2014
Сообщений: 134
Завершенные тесты: 1
02.10.2015, 10:02  [ТС] #3
Я ось свою пишу, а не программирую под windows. Мне надо прототип обработчика.
0
Mikl___
Заблокирован
Автор FAQ
02.10.2015, 10:25 #4
C
1
2
3
__asm__ __volatile__("pushf","push cs","push return_addr");
printf("!!!");
__asm__ __volatile__("iret");
0
shmkv
602 / 316 / 41
Регистрация: 21.07.2015
Сообщений: 912
02.10.2015, 10:45 #5
Обработчик не получится написать на ЯВУ. Но можно написать обертку на асме и уже внутри вызывать сишную функцию. Для этого можно даже макрос сделать. В обертке обязательно перед вызовов с-функции сохранять все регистры общего назначения, после-восстанавливать. Все остальные варианты приведут к переполнению стека из-за несовместимости со стековым кадром.
0
Вадик_
7 / 7 / 4
Регистрация: 28.03.2014
Сообщений: 134
Завершенные тесты: 1
02.10.2015, 14:59  [ТС] #6
Код можно?
0
Kastaneda
Нарушитель
Эксперт С++
4664 / 2870 / 229
Регистрация: 12.12.2009
Сообщений: 7,299
Записей в блоге: 2
Завершенные тесты: 1
21.10.2015, 23:34 #7
Цитата Сообщение от Вадик_ Посмотреть сообщение
Мне надо прототип обработчика.
На сколько я помню там есть необязательный параметр - код ошибки. Т.е. нужно делать ф-цию с переменным кол-вом аргументов
C++
1
2
void handler(...); // если С++, либо
void handler(); // если С
ну и вытягивать уже нужные аргументы при помощи <stdarg.h>

Добавлено через 3 минуты
Там же на каждое исключение можно свой обработчик повешать, вся процедура заключяется в указании адреса обработчика. Внутри обработчика уже решать что тебе нужно со стека снять (вернее что там лежит в зависимости от номера прерывания)
1
21.10.2015, 23:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2015, 23:34
Привет! Вот еще темы с ответами:

Прототип функции - C++
Здравствуйте) Написать программу упорядочивания элементов массивов А(50), В(50), С(50) по возрастанию, используя прототип функции. ...

Прототип функции - C++
Скажите,какой смысл описывать протип функции, тоесть первую строчку функции, прописывать ещё раз вверху, перед функцией main(). Что это...

Прототип функции - C++
нужно написать прототип функции, которая имеет имя f1, возвращает вещественное значение и имеет два параметра, целые числа, которые...

прототип функции - C++
Использовать прототип функции То есть заголовок перед функцией main, а описание функции в теле функции main немогу с аргументами...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru