Поиск:

Ответ в темуСоздание новой темы Создание опроса
> резидентная программа 
:(
    Опции темы
Vova_Bonch
Дата 15.4.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



   В книге Калашникова дан листинг резидентной программы, перехватывающей 9 функцию int 21h. Я пытаюсь перехватить int 16h 10 функцию, т.е. при нажатии клавиши пользователем программа должна выводить нашу строку, засунутую в обработчик. Вот измененный мною код (не работает) smile 
Код

.model tiny
.code
org 100h
start:
jmp init

int_21h proc
   cmp ah, 10h
   je ok
        
   jmp dword ptr cs:[int_21h_vect]
        
   ok:
   push ds
   push dx
   push cs
   pop  ds
    
   mov  dx, offset My_string
   pushf
   call dword ptr cs:[int_21h_vect]
    
   pop  dx
   pop  ds
   iret
    
   int_21h_vect    dd ?
   My_string db 'my_string$'
   int_21h endp
    
   init:
   mov ah, 35h
   mov al, 16h
   int  21h
    
   mov word ptr int_21h_vect, bx
   mov word ptr int_21h_vect+2, es
    
   mov ax, 2516h
   mov dx, offset int_21h
   int  21h
    
   mov dx, offset init
   int   27h
   end  start

PM MAIL   Вверх
Akina
Дата 16.4.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(Vova_Bonch @  15.4.2007,  18:45 Найти цитируемый пост)
call dword ptr cs:[int_21h_vect]

Ну-ка, вектор какого прерывания валяется в области памяти по имени int_21h_vect?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Vova_Bonch
Дата 16.4.2007, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вектор 16 прерывания*)
PM MAIL   Вверх
Akina
Дата 17.4.2007, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



И что должна сделать функция 10 прерывания 16, если ей скормить адрес какой-то строки в DS:DX?

Цитата

INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS)

        AH = 10h
Return: AH = scan code
        AL = character



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Vova_Bonch
Дата 19.4.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



По нажатию любой клавиши пользователем выводить сообщение my_string+) Как тогда корректно сделать?
PM MAIL   Вверх
Akina
Дата 19.4.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(Vova_Bonch @  19.4.2007,  14:10 Найти цитируемый пост)
Как тогда корректно сделать? 

Либо выводить строку с использованием функций прерывания 10h, либо вызывать 21h (из обработчика int 16h/fn 10h это безопасно), т.е.
Код

pushf
call dword ptr cs:[int_21h_vect]

заменить на
Код

push es
push ax
xor ax,ax
mov es,ax
pop ax
pushf
call dword ptr es:[4*21h]
pop es




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Vova_Bonch
Дата 19.4.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Большое спасибо+) smile 
PM MAIL   Вверх
Vova_Bonch
Дата 22.4.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не подскажете, почему виснет прога?
Код

.model tiny
.code
org 100h

start:
old_handler:
    jmp short initialize
    
int09_handler proc far
    in    al, 60h
    cmp    al, 15h
    jne    not_Y_key
    
    mov    dl, al
    mov    ah, 02h
    int    21h
    
    not_Y_key:
    push    es
    push    ax
    xor    ax, ax
    mov    es, ax
    pop    ax
    call    dword ptr es:[4*09h]
    pop    es
    in    al, 61h
    push    ax
    or    al, 80h
    out    61h, al
    pop    ax
    out    61h, al
    
    mov    al, 20h
    out    20h, al
    iret
handler_vect dd ?
int09_handler endp
    
initialize proc near
    mov    ax, 3509h
    int    21h
        
    mov    word ptr handler_vect, bx
    mov    word ptr handler_vect+2, es
    
                        mov    ax, 2509h
    mov    dx, offset int09_handler
    int    21h
    
    mov    dx, offset initialize
    
    int    27h
    ret
initialize endp
    
end start 

PM MAIL   Вверх
Akina
Дата 23.4.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Перед вызовом старого обработчика прерывания рекомендуется в стек помещать таки текущее состояние флагов. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dumb
Дата 23.4.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



...и не вызывать в обработчике 9го прерывания процедуру обработки 9го прерывания.

Vova_Bonch, перед написанием резидентов нужно освоить хотя бы написание обычных программ. причем желательно не просто написание(copy-past), а и понимание происходящего.
PM MAIL   Вверх
Akina
Дата 23.4.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(dumb @  23.4.2007,  13:55 Найти цитируемый пост)
...и не вызывать в обработчике 9го прерывания процедуру обработки 9го прерывания

в смысле 21-го


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dumb
Дата 23.4.2007, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Akina @  23.4.2007,  14:40 Найти цитируемый пост)
в смысле 21-го

вызов 21-го - это одна из кучки "остальных" ошибок. smile

имелось ввиду вот это:
Код

int09_handler proc far
...
    call    dword ptr es:[4*09h]

PM MAIL   Вверх
Akina
Дата 24.4.2007, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(dumb @  23.4.2007,  23:07 Найти цитируемый пост)
имелось ввиду вот это:
 smile 
а что ты предлагаешь? полностью отрезать предыдущий обработчик? боюсь, будет весело...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dumb
Дата 24.4.2007, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Akina @  24.4.2007,  08:07 Найти цитируемый пост)
а что ты предлагаешь?

даю "на водку": smile
Код

int09_handler proc far
...
    call    dword ptr cs:[handler_vect]

да и тут jmp'а достаточно - call нафик не нужен.
PM MAIL   Вверх
Akina
Дата 24.4.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



dumb, да, сорри, туплю... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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