Поиск:

Ответ в темуСоздание новой темы Создание опроса
> newalexx, Проблема с резидентом 
:(
    Опции темы
newalex
Дата 15.11.2005, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нужно написать резидент на асме, который бы реагировал на сочетнаие клавиш Alt+ чего нить или Ctrl+... Под реакцией понимается вывод сообщения на экран.
Я вроде знаю как резиденты писать, знаю как сочетания ловить, но чего-то не получается... Хотелось бы увидеть исходный текст для последующего анализа. Можно без комментариев.
Заранее благодарен.
PM MAIL   Вверх
newalex
Дата 16.11.2005, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Извиняюсь, что тему неправильно записал smile Жду советов
PM MAIL   Вверх
Akina
Дата 16.11.2005, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Вешаешь резидент на клавиатурное прерывание (IRQ1, Int 09h). Если извлекается скан-код нужной клавиши - смотришь Shift Status в Low Memory (а можешь и сам отслеживать), если состояние модификаторов тоже требуемое - выставляешь флаг. По этому флагу обработчик DOS Idle (Int 28h - его ты тоже напишешь) выводит на экран надпись. Все вроде...




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

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


Шустрый
*


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

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



Вот написал программу. Резидент, срабатывает на комбинацию Alt+1, но текст не выводит, а фигню какую-то пишет. Подскажите, что не так smile


Код

 text segment 'code'
assume cs:text,ds:text
org 100h

main proc
    jmp init
    old_09h dd 0

new_09h proc                     ; new 09h handler
    push ax
    push dx
    push es

    IN    AX,60H        
    CMP    AX,2        ; Чтение порта клавиатуры в AX
    JNZ    A1        ; Проверка нажатия клавиши "1"
    MOV    AX,0        ; если нет, то возврат управления
    MOV    ES,AX        ; Чтение флагов состояния
    MOV    AL,ES:[0417H]    ; клавиатуры в регистр AL и
    AND    AL,00001000B    ; определение нажаты ли клавиши
    CMP    AL,00001000B    ; Alt-1, если нет, то
    je Ctrl_key            ; yes, skip

A1:
    pop es
    pop dx
    pop ax
    jmp cs:old_09h    ; jump to native 09h handler

Ctrl_key:
    mov ah,09h            ; message
    mov dx,offset mes1
    int 21h
    iret                     ; return
    new_09h endp
    end_res=$                           ; tail bellow
main endp

init proc 
    mov ax,3509h        ; save old 09h
    int 21h
    mov word ptr CS:old_09h,bx
    mov word ptr cs:old_09h+2,es

    mov ax,2509h        ; set new 09h
    mov dx,offset new_09h
    int 21h

    mov ah,09h            ; message
    mov dx,offset mes
    int 21h

    mov ax,3100h          
    mov dx,(end_res-main+10fh)/16  ; remove tail
    int 21h                                        ; terminate, state resident 
init endp

mes db 'Resident in memory',10,13,'$'
mes1 db 'Resident!!!',10,13,'$'
text ends
end main


Это сообщение отредактировал(а) newalex - 16.11.2005, 18:43
PM MAIL   Вверх
Akina
Дата 16.11.2005, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Изволь исправить постинг, используя тег "Код" и структурирующие отступы/табуляции - мне в plain text рыться влом.


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

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


Шустрый
*


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

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



Исправил... Резидентные программы равно как и ассемблер стал более детально изучать только три дня назад, так что просьба помочь. Догадываюсь, что есть какие-то детали, но их, увы, не знаю.
PM MAIL   Вверх
Akina
Дата 16.11.2005, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Первая и главная ошибка - из обработчика 9 прерывания НЕЛЬЗЯ вызывать функции ДОС! а у тебя через 21h выводится мессага...


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

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


Шустрый
*


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

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



За этим я вопрос и задал. Прошу наставить меня на путь истинный. Я же написал, что плохо в ассемблере разбираюсь. Помогите кодом, пожалуйста...
Заранее благодарен
PM MAIL   Вверх
makwen
Дата 17.11.2005, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Akina:
"Первая и главная ошибка - из обработчика 9 прерывания НЕЛЬЗЯ вызывать функции ДОС! а у тебя через 21h выводится мессага... "

Почему нельзя? Я менял 9 прирывание, и внем выводил на экран скан коды нажатых клавиш, и все прикрасно работало! smile
Конечно, можно было писать прямо в видео память, но впадло...

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


Шустрый
*


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

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



Господа, мне поможет кто-нибудь или нет?
PM MAIL   Вверх
Lonley
Дата 17.11.2005, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



код не претендует на оригигальность
просто недавно писал правда выгрузку так и не реализовал
ленивый Я
Код

.386
IDEAL
MODEL TINY
CODESEG
ORG 100h

_start:
    jmp _init
    old_int09    dd 00
    init        db 0
    
spec_sym db 214,127 ,'S',79 ,'y',79 ,'m',79 ,'b',79 ,'o',79 ,'l',79 ,'s',79 ,183,127
     db 186,127 ,' ',31 ,'2',31 ,'1',31 ,'8',31 ,'-',27 ,218,30 ,' ',31 ,186,127
     db 186,127 ,' ',31 ,'1',31 ,'9',31 ,'1',31 ,'-',27 ,191,30 ,' ',31 ,186,127
     db 186,127 ,' ',31 ,'1',31 ,'9',31 ,'2',31 ,'-',27 ,192,30 ,' ',31 ,186,127
     db 186,127 ,' ',31 ,'2',31 ,'1',31 ,'7',31 ,'-',27 ,217,30 ,' ',31 ,186,127
     db 186,127 ,' ',31 ,'1',31 ,'9',31 ,'6',31 ,'-',27 ,196,30 ,' ',31 ,186,127
     db 186,127 ,' ',31 ,'1',31 ,'7',31 ,'9',31 ,'-',27 ,179,30 ,' ',31 ,186,127
     db 211,127 ,196,127 ,196,127 ,196,127 ,196,127 ,196,127 ,196,127 ,196,127 ,189,127
proc int09h
    pushf
    push ax
    push dx
    push cx
    push es
    push si
    push di
    push bx        
;#############################################################################    
_beg:    
    in al,60h    ;зЁв Ґ¬ Ё§ Ї®ав  бЄ ­ Є®¤ Є« ўЁиЁ
    jmp e        ;§ ¤Ґа¦Є  ¤«п ба Ў влў ­Ёп  ЇЇ а вгал
e:    cmp al,41    ;Ґв® `~ ??
    jz _yes_    ;¤ 
    jmp _any_key    ;­Ґв
_yes_:            ;
    mov ax,0040h    ;
    mov es,ax    ;
_e:            ;
    mov al,byte ptr es:[018h]    ;зЁв Ґ¬ б«®ў® б®бв®п­ЁҐ Є« ў
    test al,0000001b        ;ctrl «Ґў п ­ ¦ в 
    jnz _end            ;¤ 
    jmp _any_key            ;­Ґв
_end:    
    cmp init,1
    jz _clear
    mov init,1
    jmp _out_str
_any_key:
    cmp init,1
    je _out_str
    jmp _restore
    
;#############################################################################
_out_str:
    mov ax,0b800h    ; ¤аҐб ўЁ¤Ґ®Ї ¬пвЁ ў вҐЄбв®ў®¬ аҐ¦Ё¬
    mov es,ax    ;ᥣ¬Ґ­в­л© аҐЈЁбва ­  нв®в  ¤аҐб
    lea si,spec_sym    ; ¤аҐб бва®ЄЁ
    mov cx,8    ;
    mov bx,17    ;string
    mov di,231*2
_string:
    mov al,cs:[si]
    mov es:[di],al
    inc di
    inc si
    cmp bx,0
    jz _end_str
    dec bx
    jmp _string
_end_str:
    mov bx,17

    add di,79*2-16
    loop _string; 
;#############################################################################
    jmp _restore
_clear:
    mov init,0
_restore:
    pop bx
    pop di    ;ў® -
    pop si    ;бв -
    pop es    ; ­ -
    pop cx    ; ў -
    pop dx    ;«Ё -
    pop ax    ;ў Ґ¬ аҐЈЁбвал
    popf    ;Ё д« ЈЁ
    jmp dword ptr cs:[old_int09]    ;ЇҐаҐе®¤ ­  бв ал© ®Ўа Ў®взЁЄ
endp int09h                ;
                        ;
_init:                        ;
    cli
    xor ax,ax                ;
    mov es,ax                ;
    mov eax,dword ptr es:[09h*4]        ;
    mov old_int09,eax            ;
                        ;
    mov word ptr es:[09h*4],offset int09h    ;
    mov ax,cs                ;
    mov word ptr es:[09h*4+2],ax        ;
    sti                    ;
    lea dx,str_help
    mov ah,09h
    int 21h
    
    lea dx,_init                ;
    int 27h                    ;

    
;##########################################################################
; AREA DATA No REZIDENT

    str_help    db 'Press Ctrl + ~ to out symbols menu',10,13
            db 'copyright Lonley 2005',10,13
            db '[email protected]','$'

end _start

Добавлено @ 16:22
а этот копирует экран Нортона (в чем работаешь) в файл
Код

.386
IDEAL
MODEL TINY
CODESEG
ORG 100h

_start:
    jmp _init
    old_int09    dd 00
    
    old_int21_ofs    dw 0
    old_int21_seg   dw 0
    
    init        db 0
    int21_active    db 0
    
    file            db 'screen.txt',0
    
    h_fil           dw 0
    key_word    dw 0ffffh
     
proc int21h
    mov cs:int21_active,1
    pushf
    call dword ptr cs:[old_int21_ofs]
    mov cs:int21_active,0
    retf 2
endp int21h
     
proc int09h
    pushf
    push ax
    push dx
    push cx
    push es
    push si
    push di
    push bx        
    push ds
;#############################################################################    
_beg:    
    in al,60h    ;зЁв Ґ¬ Ё§ Ї®ав  бЄ ­ Є®¤ Є« ўЁиЁ
    jmp e        ;§ ¤Ґа¦Є  ¤«п ба Ў влў ­Ёп  ЇЇ а вгал
e:    cmp al,41    ;Ґв® `~ ??
    jz _yes_    ;¤ 
    jmp _restore    ;­Ґв
_yes_:            ;
    mov ax,0040h    ;
    mov es,ax    ;
_e:            ;
    mov al,byte ptr es:[018h]    ;зЁв Ґ¬ б«®ў® б®бв®п­ЁҐ Є« ў
    test al,0000001b        ;ctrl «Ґў п ­ ¦ в 
    jnz _end            ;¤ 
    jmp _restore            ;­Ґв
_end:    
;#############################################################################
    cmp cs:int21_active,1    ;ў¤а㣠㦥 ЇаҐалў ­ЁҐ ўлЇ®«­пҐвбп
    je _yes            ;¤  ----------->
    mov ax,cs    ;
    mov ds,ax    ;
            ;
    mov ah,3ch    ;б®§¤ ¤Ё¬ д ©«
    xor cx,cx    ;®Ўлз­л© д ©«
    lea dx,cs:file    ;в ¬ Ё¬п
    int 21h        ;----------->
            ;
    mov ah,3dh    ;®вЄа®Ґ¬ д ©«
    mov al,02h    ;¤«п § ЇЁбЁ
    lea dx,cs:file    ;в ¬ Ё¬п д ©« 
    int 21h        ;----------->
    mov cs:h_fil,ax    ;б®еа ­Ё¬ ¤ҐбЄаЁЇв®а
    
    mov ax,0b800h    ; ¤аҐб ўЁ¤Ґ®Ї ¬пвЁ ў вҐЄбв®ў®¬ аҐ¦Ё¬Ґ 03
    mov ds,ax    ;ᥣ¬Ґ­в DS ­  ўЁ¤Ґ®Ї ¬пвм
    xor dx,dx    ;®в ­ з «  ўЁ¤Ґ®Ї ¬пвЁ

    mov bx,cs:h_fil    ;¤ҐбЄаЁЇв®а д ©« 
    mov ah,40h    ;дг­ЄжЁп § ЇЁбЁ
    mov cx,4000    ;4000 Ў ©в
    int 21h        ;ЇЁиҐ¬   --->  ў¬Ґб⥠ᠠвваЁЎгв ¬Ё
    
    mov ah,3eh
    mov bx,cs:h_fil
    int 21h    
    
_yes:

;#############################################################################
_restore:
    pop ds
    pop bx
    pop di    ;ў® -
    pop si    ;бв -
    pop es    ; ­ -
    pop cx    ; ў -
    pop dx    ;«Ё -
    pop ax    ;ў Ґ¬ аҐЈЁбвал
    popf    ;Ё д« ЈЁ
    jmp dword ptr cs:[old_int09]    ;ЇҐаҐе®¤ ­  бв ал© ®Ўа Ў®взЁЄ
endp int09h                ;
                        ;
_init:    
    cli                    ;
    xor eax,eax
    mov es,ax
    
    mov si,es:[84h]
    mov ax,es:[86h]
    mov es,ax
    mov ax,word ptr es:[si-2]
    cmp ax,0ffffh
    je _res_loadet

    
    xor eax,eax                ;
    mov es,ax                ;

    mov eax,dword ptr es:[09h*4]        ;
    mov old_int09,eax            ;
;-----------------------------------------------------------------
    mov ax,es:[21h*4]
    mov old_int21_ofs,ax
    mov ax,es:[21h*4+2]
    mov old_int21_seg,ax
;-----------------------------------------------------------------
    mov word ptr es:[09h*4],offset int09h    ;
    mov ax,cs                ;
    mov word ptr es:[09h*4+2],ax
;-----------------------------------------------------------------
    mov word ptr es:[21h*4],offset int21h
    mov word ptr es:[21h*4+2],ax
    
    sti                    ;
    lea dx,str_help
    mov ah,09h
    int 21h
    
    lea dx,_init                ;
    int 27h                    ;
_res_loadet:
    
    lea dx,res_l
    mov ah,09h
    int 21h
    
    mov ax,4c00h
    int 21h
    
;##########################################################################
; AREA DATA No REZIDENT

    str_help    db 'Press Ctrl + ~ save screen to file screen.txt',10,13
            db '(c) copyright Lonley 2005',10,13
            db '[email protected]','$'
            
    res_l        db 'Resident loadet','$'

end _start



--------------------
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Каков он был, о, как произнесу,
Тот дикий лес, дремучий и грозящий,
PM MAIL ICQ   Вверх
newalex
Дата 17.11.2005, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за примеры. Посмотрел пока только первый. Чего-то у меня на кнопочки не срабатывает smile Не могли бы вы пояснить немного?
PM MAIL   Вверх
newalex
Дата 17.11.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Akina @ 16.11.2005, 09:36)
По этому флагу обработчик DOS Idle (Int 28h - его ты тоже напишешь) выводит на экран надпись. Все вроде...

Нельзя ли поподробнее

Это сообщение отредактировал(а) newalex - 17.11.2005, 20:53
PM MAIL   Вверх
newalex
Дата 18.11.2005, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ребят, ну подскажите кто-нибудь нуждающемуся. Исправьте то, что я выше сам выкидывал. Программа то простая должна быть! А я уже три дня сделать не могу... уделите пять минут времени, пожалуйста.

PM MAIL   Вверх
makwen
Дата 18.11.2005, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот че-та у меня завалялось! Может пригодится....

.model small
stack 256h
.486p
.data
old_off8 dw 0
old_seg8 dw 0
buffer db 00
a dw 00
b db 'Hello $'
.code
start :
off_1ch equ 09h*4
main proc
mov ax,@data
mov ds,ax
xor ax,ax

cli
mov ax,0
mov es,ax

; sochranjaem starij vektor
mov ax,es:[off_1ch]; smewenie starogo vektora 1ch v ax
mov old_off8,ax; sochranenija -=-
mov ax,es:[off_1ch+2]
mov old_seg8,ax

;zapis' novogo vektora v tablizu vektorov pririvanija
mov ax,offset new_1ch
mov es:off_1ch,ax
push cs
pop ax
mov es:off_1ch+2,ax
sti

vost_1:
jmp vost_1

vost:
mov ah,09h
lea dx,b
int 21h

cli
xor ax,ax
mov es,ax
mov ax,old_off8
mov es:off_1ch,ax
mov ax,old_seg8
mov es:off_1ch+2,ax
sti
mov ah,04ch
int 21h
main endp

new_1ch proc

push ax
push di
push es

in al,60h
cmp al,01 ; ESC
je vost
mov bl,al

pop es
pop di

in al,61h
mov ah,al
or al,080h
out 61h,al
xchg ah,al
out 61h,al

mov al,20h
out 20h,al
pop ax

iret
new_1ch endp


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

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

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


 




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


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

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