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

Ваш аккаунт

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

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

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

проблема с подменой прерывания

4.4K
05 января 2007 года
erzik
47 / / 08.04.2006
есть две программы:
- первая делает подмену прерывания 20h, ждет нажатия кнопки, проверяет работу подмененного прерывания и восстанавливает это прерывание, после чего завершается int 20h
- вторая прога содержит сначала int 20h, а потом ожидание нажатия клавиши

теперь в чем проблема:
в одном досовском окошке запускаю первую прогу, когда прерывание заменяется, запускаю в другом окошке вторую прогу и вот тут непонятки! почему вторая прога завершается не требуя нажатия клавиши? ведь прерывание подменено!

выкладываю коды, чтоб понятнее было:
---------------------- прога номер 1----------------------------
org 100h

cli ;подмена прерывания
push ax
push es
xor ax,ax
mov es,ax
mov ax,[es:20h*4]
mov [cs:int_old],ax
mov ax,[es:20h*4+2]
mov [cs:int_old2],ax
mov ax,int_new
mov [es:20h*4],ax
mov [es:20h*4+2],cs
pop es
pop ax
sti

mov ax,10h ;проверка того, что прерывание подменено
int 16h ;и тут все как надо
mov ax,0
int 20h
int 16h

cli ;восстановка прерывания
push ax
push es
xor ax,ax
mov es,ax
mov ax,[cs:int_old]
mov [es:20h*4],ax
mov ax,[cs:int_old2]
mov [es:20h*4+2],ax
pop es
pop ax
sti


mov ax,10h ;завершение проги
int 16h
int 20h


int_new: ;само прерывание (новое)
mov ax,10h
iret

int_old dw 0
int_old2 dw 0
symbol db ' :) $'

-------------------------прога номер 2-------------------------
org 100h

int 20h ;прога завершается как всегда, как будто
mov ah,10 ;прерывание не подменяли :(
int 16h




писал все на NASM. подскажите, как сделать, чтобы прерывание подменивалось нормально для всей винды, а не для одного окошка и как это объяснить...
8.8K
06 января 2007 года
The_Ice
109 / / 04.04.2006
непонятки, потому что в винде для каждой досовской проги запускается своя витруальная машина доса (ntdvm) и когда ты делаешь что-либо, все это остается только в этой ВМ. Для всей винды сменить не получиться, там надо со всякими хуками разбираться и уж тем более не из досовской проги (: (KeyboardHook)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог