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

Ваш аккаунт

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

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

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

Обработчик третьего прерывания.

18K
21 января 2007 года
uighur
17 / / 24.12.2006
Обрабаотчик третьего прерывания у меня выглядит вот так:
Код:

void int03_handler(void) {
printf("int 3 called!");
__asm__ __volatile__("leave\n iret\n");

Тип шлюза - 0xf(шлюз ловушки). Привелегии 3 ( возможен вызов с прикладнова уровня)
При попытке отладить прогу gdb получаю вот что:
Код:

(gdb) break main
Breakpoint 1 at 0x080484d2
(gdb) run
Starting program:/home/uighur/t
int 3 called!

Program reseived signal SIGSEGV, Segmentation fault.
0x00000000 ??()
(gdb)

ОС-FreeBSD 5.5.
Как сделать что бы после вызова обработчика управление передавалось туда, где и была команда int3?
1.9K
21 января 2007 года
disasm
232 / / 06.02.2006
Может лучше обработчик прерывания на асме переписать? А то у меня есть некоторые сомнения по поводу того, что сработает вообще функция printf(); если, скажем, в ds загружен селектор для юзерского сегмента данных, а не для сегмента данных ядра...
18K
21 января 2007 года
uighur
17 / / 24.12.2006
Сообщение выводится. Но при вызове из процесса пользователя возврат происходит по адресу 0, но не в ядро а в тот процесс. А разьве при переключении задач ds не будет смотреть на ds ядра?
1.9K
21 января 2007 года
disasm
232 / / 06.02.2006
Все-таки лучше на ассемблере обработчик написать, а то могут быть со стеком проблемы
18K
21 января 2007 года
uighur
17 / / 24.12.2006
Заменил первую инструкцию обработчика в hex редакторе на iretd. Результат прежний.Так что дело тут не в том что стек не сбалансирован.
505
22 января 2007 года
vAC
343 / / 28.02.2006
может попробовать проанализировать дизассемблерный код этого обработчика? может все встанет на свои места. Конечно такие вещи желательно на асме писать...
349
22 января 2007 года
Phantom-84
656 / / 27.10.2005
Функции консольного ввода-вывода вставлять в обработчики крайне нежелательно! Хорошим тоном в программировании является отложенная визуальная обработка прерываний, в том числе и отладочных!
18K
22 января 2007 года
uighur
17 / / 24.12.2006
imho, тут всё от задачи зависит.К примеру в интерактивном отладчике уровня ядра без ввода вывода нельзя(иначе что за интерактивность).А в других случаях необходимо минимизировать время обработки прерывания => консольный ввод вывод нужно убрать. Но так как этот код я пишу тока для того что бы научится работать в защищённом режиме и одновременно изучить ядро FreeBSD то этим я пренебригаю.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог