Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объясните принцип перехвата прерывания, Передача зн. адресс вектора и т.д. 
:(
    Опции темы
PoluBOG
Дата 19.10.2002, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 24.5.2002

Репутация: нет
Всего: нет



Передача значения, как расчитать адресс вектора. Мне надо перехватить и обработать 12 прерывание (порт пс/2 или мыха) для своих нестандартных целей) :hmmm
PM MAIL   Вверх
Chingachguk
Дата 28.10.2002, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Таблица векторов - массив из дальних адресов обработчиков, те каждый из них по 4 байта: offset:seg.

Вот пример перехвата ветора int 13h "руками":

Код

; es=0, Хотим сделать направленным вектор
; int 13h на наш обработчик @@New13Handler
       mov   di,13h*4          ; Hook int 13h
       mov   ax,offset @@New13Handler - 100h
       xchg  ax,word ptr es:[di]
       mov   word ptr Old13h-100h,ax
       mov   ax,cs
       xchg  ax,word ptr es:[di+2]
       mov   word ptr Old13h-100h+2,ax
       ...
; Вызов старого обработчика:
       mov   si,offset Old13h-100h
       ...
       pushf
       call  dword ptr ds:[si]; Execute It !


Вот пример перехвата вектора через ДОС:

Код

; Обработчик (новый) вектора 9H:
KEYb:PUSH  DS                                ; Entry Point For 09h
       PUSH  CS
       POP   DS
       PUSHF
       CALL  DWORD PTR OLD_9H
       ...
; Обработчик (новый) вектора 10H:
MESSAGE PROC NEAR
       PUSH  DS                                ; Entry Point For 10h
       PUSH  CS
       POP   DS
       MOV   BIOS_FLAG,0
       ...
; Перехватывем вектора int 9h (keyboard)
; и 10h (bios, display services)
       MOV   AL,09H
       MOV   DI,OFFSET OLD_9H
       MOV   DX,OFFSET KEYB
       MOV   SI,OFFSET LOAD_VECTOR
       CALL  SI
       MOV   AL,10H
       MOV   DX,OFFSET MESSAGE
       CALL  SI
       ...
; Код процедуры LOAD_VECTOR
LOAD_VECTOR PROC NEAR
       MOV  AH,35H
       INT  21H
       MOV  [DI],BX
       INC  DI
       INC  DI
       MOV  [DI],ES
       INC  DI
       INC  DI
       MOV  AH,25H
       INT  21H
       RET
LOAD_VECTOR ENDP


А вот как можно реализовать перехват вектора 1C (вспомогательный user-таймер) на языке Паскаль:
Код

{Обработчик прерывания}
procedure curs(flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp:word); interrupt;
begin
asm
@@new: push ax; push ds
      mov ax,seg @Data; mov ds,ax; mov ax,3
      int 33h
...
{Установка нового вектора}
var
old,new1:pointer;
n:byte;
begin
N:=(12+16);
getintvec(n,old); {Запомнить старый в old}
asm
mov word ptr new1,offset curs
mov word ptr new1+2,seg curs
end;
setintvec(n,new1); {Установить новый}
...
{Программа закочена, вернуть все назад}
n:=12+16;
setintvec(n,old);



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.