Uzywanie przerwan w VxD
Writeln by [CoxoC]
Exec_Int jest to serwis ktory umozliwia nam wykonanie przerwania w naszym VxDku
serwis ten korzysta z serwisow Simulate_Int i Resume_Exec moze byc tylko
wtedy uzyty gdy "blok uruchomien" zostal stworzony przez Begin_Nest_Exec
lub Begin_Nest_V86_Exec serwis.
Serwis Simulate_Int uzywa Client_CS, Client_EIP, Client_Flags wiec nalezy przechowac
te wartosci.
hmm ale narazie nie wiemy jak tego serwisu uzywac wiec przydalo by sie odpalic SoftICE i
sprawdzic czy zaden ze standardowych VxDkow nie uzywa tego serwisu .
Nalezy wiec odpowiednio spreparowac plik winice.dat .Uhh po sleczeniu nad ksiazka
"Windows 95 System programming SECRETS" Matta Pietreka doszedlem do wniosku ze wystarczy
dodac tylko te linie :
; Silnik VxD
EXP=c:\windows\system\vmm32.vxd ; Virtual Manager
EXP=c:\windows\system\vmm32\ifsmgr.vxd ; Installable File System Manager
EXP=c:\windows\system\vmm32\ios.vxd ; I/O Supervisor (replaces BLOCKDEV)
Teraz zakladamy pulapke na Exec_Int i po paru milisekundach mamy odpowiedz jakis VxD
uzywa tego serwisu :> na ekranie mamy
C0003A10 CALL [Simulate_Int] (czesc VMM)
MOV EAX,EAX
itd.
A wiec to co pisali jest prawda :> wychodzimy z tego calla i jestesmy w VMPOLL
Oto procedurka :
SUB ESP,6Ch
MOV EDI,ESP
CALL [Save_Client_State]
CALL [Begin_Nest_V86_Exec]
MOV WORD PTR [EBP+1C],1607h
MOV WORD PTR [EBP+10],0018h
MOV WORD PTR [EBP+18],0000h
MOV EAX,2Fh
CALL [Exec_Int]
MOV ECX,[EBP+1C]
CALL [End_Nest_Exec]
MOV ESI,ESP
CALL [Restore_Client_State]
ADD ESP,6Ch
Nasuwa sie pytanie jakie przerwanie ona wywoluje i co zapamietuje na stosie.....
wiec uruchamia ona przerwanie 2Fh ... Czas na Ralf Brown's Interrupt List :>
zobaczmy co kryje sie pod funkcja 1607h tegoz przerwania :
INT 2F 1607 - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
callout or callback (usually hooked rather than called)
Category: W - MS Windows
Inp.:
AX = 1607h
BX = 0018h (VMPoll VxD ID) (see #02642)
CX = 0000h
Return: AX = status
0000h if timeslice used
nonzero if timeslice not needed
Note: when VMPoll makes this callout, all virtual machines are idle, and any
interested TSR can use the opportunity to perform background
processing
A wiec wszystko zaczyna wspolgrac ze soba
MOV WORD PTR [EBP+1C],1607h < MOV AX,1607h
MOV WORD PTR [EBP+10],0018h < MOV BX,0018h
MOV WORD PTR [EBP+18],0000h < MOV CX,0000h
Ale gdzie tak naprawde zostaja wpisane te wartosci ? Odpowiedz jest prosta - w kodzie
naszego VxDka te trzy rozkazy beda wygladaly nastepujaca :
MOV [ebp.Client_AX],1607h
MOV [ebp.Client_BX],0018h
MOV [ebp.Client_CX],0000h
...konczac oto procedurka nadajaca sie do uzycia w kodzie naszego VxDka :
SUB ESP,6Ch
MOV EDI,ESP
VxDCall Save_Client_State
VxDCall Begin_Nest_V86_Exec
MOV [ebp.Client_AX],1607h
MOV [ebp.Client_BX],0018h
MOV [ebp.Client_CX],0000h
MOV EAX,2Fh
VxDCall Exec_Int
MOV ECX,[ebp.Client_EAX]
VxDCall End_Nest_Exec
MOV ESI,ESP
VxDCall Restore_Client_State
ADD ESP,6Ch
..... oczywiscie nalezy uzywac innych przerwan .....
..... Analiza gruntowna .......
Serwis Save_Client_State jak sama nazwa na to wskazuje :P zapamietuje stan wszystkich
rejestrow klijenta. EDI na wejsciu ma wskazywac obszar w pamieci,
w ktory maja zostac wpisane te rejestry - rozmiar tego obszaru
to 6Ch , co tlumaczy rozkazy SUB ESP,6Ch i ADD ESP,6Ch
Serwis Restore_Client_State przywraca stan rejestrow klijenta . ESI na wejsciu ma wskazywac
obszar z ktorego maja byc pobierane dane
Z helpa dowiadujemy sie ze nie wolno przywracac rejestrow klijenta bezposrednio gdyz to
prowadzi do zawieszenia sie VMM.
Serwis Begin_Nest_V86_Exec z grubsza rzecz biarac konvertuje protected-mode calls w V86 calls
uzywa Client_CS, Client_IP, Flags
Serwis End_Nest_Exec nasz VxDek misu zakonczyc "blok uruchomien" przed powrotem do VMM
uzywa Client_CS, Client_IP, Flags
Przyklad ...
SUB ESP,6Ch
MOV EDI,ESP
VxDCall Save_Client_State
VxDCall Begin_Nest_V86_Exec
MOV [ebp.Client_AX],0E07h
MOV EAX,10h
VxDCall Exec_Int
MOV ECX,[ebp.Client_EAX]
VxDCall End_Nest_Exec
MOV ESI,ESP
VxDCall Restore_Client_State
ADD ESP,6Ch
.... uslyszysz krutki dzwiek
Writeln by [CoxoC]
Wyszukiwarka
Podobne podstrony:
FORMATY PLIKóW VxDtut4FORMATY PLIKóW VxDtut1FORMATY PLIKóW VxDtut0FORMATY PLIKóW VxDtut2FORMATY PLIKóW VxDtut6FORMATY PLIKóW VxDtut3Dostosuj swój stary Office do nowych formatów plikówFORMATY PLIKóW GifFORMATY PLIKóW BMPFORMATY PLIKóW Mod infoFORMATY PLIKóW PEFORMATY PLIKóW bgiSylwester Zajac Multimedia Formaty plikow graficznychFORMATY PLIKóW Modform4 Formaty plikow w DTPFORMATY PLIKóW GIF89MFORMATY PLIKóW PE formatFORMATY PLIKóW Mid frm4więcej podobnych podstron