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

C++

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

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

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

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

C++ Прототип функции
C++ Составить прототип функции
C++ Прототип функции reload_buff()
Прототип функции C++
C++ Прототип функции С++
Прототип функции C++
C++ Прототип функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mikl___
Автор FAQ
11157 / 5685 / 493
Регистрация: 11.11.2010
Сообщений: 10,718
02.10.2015, 04:02     Прерывания в ОСи: прототип функции-обработчика #2
Вадик_,
чтобы iret нормально отработал в стек нужно занести три параметра
текущее содержимое регистра флагов EFLAG (команда pushf)
текущее содержимое регистра CS (команда push cs)
и адрес возврата из прерывания (push адрес_возврата)
но под Windows система не даст вызвать прерывание пользователя, только под "чистым" DOS или, на худой конец, в режиме эмуляции DOS
Вадик_
7 / 7 / 4
Регистрация: 28.03.2014
Сообщений: 134
Завершенные тесты: 1
02.10.2015, 10:02  [ТС]     Прерывания в ОСи: прототип функции-обработчика #3
Я ось свою пишу, а не программирую под windows. Мне надо прототип обработчика.
Mikl___
Автор FAQ
11157 / 5685 / 493
Регистрация: 11.11.2010
Сообщений: 10,718
02.10.2015, 10:25     Прерывания в ОСи: прототип функции-обработчика #4
C
1
2
3
__asm__ __volatile__("pushf","push cs","push return_addr");
printf("!!!");
__asm__ __volatile__("iret");
shmkv
562 / 276 / 37
Регистрация: 21.07.2015
Сообщений: 845
02.10.2015, 10:45     Прерывания в ОСи: прототип функции-обработчика #5
Обработчик не получится написать на ЯВУ. Но можно написать обертку на асме и уже внутри вызывать сишную функцию. Для этого можно даже макрос сделать. В обертке обязательно перед вызовов с-функции сохранять все регистры общего назначения, после-восстанавливать. Все остальные варианты приведут к переполнению стека из-за несовместимости со стековым кадром.
Вадик_
7 / 7 / 4
Регистрация: 28.03.2014
Сообщений: 134
Завершенные тесты: 1
02.10.2015, 14:59  [ТС]     Прерывания в ОСи: прототип функции-обработчика #6
Код можно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2015, 23:34     Прерывания в ОСи: прототип функции-обработчика
Еще ссылки по теме:

Прототип функции C++
прототип функции C++
C++ Прототип функции
C++ Прототип функции
C++ Прототип функции

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4470 / 2832 / 224
Регистрация: 12.12.2009
Сообщений: 7,202
Записей в блоге: 1
Завершенные тесты: 1
21.10.2015, 23:34     Прерывания в ОСи: прототип функции-обработчика #7
Цитата Сообщение от Вадик_ Посмотреть сообщение
Мне надо прототип обработчика.
На сколько я помню там есть необязательный параметр - код ошибки. Т.е. нужно делать ф-цию с переменным кол-вом аргументов
C++
1
2
void handler(...); // если С++, либо
void handler(); // если С
ну и вытягивать уже нужные аргументы при помощи <stdarg.h>

Добавлено через 3 минуты
Там же на каждое исключение можно свой обработчик повешать, вся процедура заключяется в указании адреса обработчика. Внутри обработчика уже решать что тебе нужно со стека снять (вернее что там лежит в зависимости от номера прерывания)
Yandex
Объявления
21.10.2015, 23:34     Прерывания в ОСи: прототип функции-обработчика
Ответ Создать тему
Опции темы

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