[pso] Probleme la functia interceptor

Andrei Costin pso@cursuri.cs.pub.ro
Thu, 17 Mar 2005 12:07:55 -0800 (PST)


Thursday, March 17, 2005, 10:00:50 PM, you wrote:

ms> Salut,
 
ms> Am intampinat dificultati la functia interceptor. Am folosit functia cum apare in
cursul 2:
 
ms> NTSTATUS interceptor(){
ms> int syscall,syscall_table,syscall_index;
ms> void * old_stack, *new_stack;
ms> _asm mov syscall,eax
ms> syscall_table = syscall>>12;
ms> syscall_index=syscall&0x0FFF;
ms> params = KeServiceDescriptorTable[syscall_table].spt[syscall_index];
 
ms> //----------------------------------------------
ms> _asm mov old_stack , ebp
ms> _asm  add old_stack,8
ms> _asm sub ebp,params
ms> _asm mov new_stack,ebp
ms> memcpy(new_stack,old_stack,params)
ms> f();//vechea functie
ms> }
 
ms> Cred ca apare o eroare, sau mie cel putin daca adaug partea de sun ------ de mai sus
imi crapa sistemul.

apelezi f() - esti sigur ca ai in f() adresa de inceput a functiei originale?

ms> Am incercat sa vad ce valoare are params si am descoperit ca pentru NtOpenMutant are
valoarea 24, desi functia are doar 3 parametrii. Din ce intelesesem eu ar fi trebuit sa
aiba valoarea 3*4 =
ms> 12. Poate gresesc si trebuie sa fie 24.

12 bytes trebuie sa fie aka 3 argumente

ms> Oricum, nu inteleg altfel de ce apare eroare, caci
KeServiceDescriptorTable[syscall_table].spt[syscall_index] tine de fapt numarul de octeti
ai parametrilor si codul cu plimbatul prin stiva este
ms> corect. 
ms> Orice indicatie ar fi binevenita.

Poate "strici" cumva KeServiceDescriptorTable... have no idea...

Cu WinDbg ia incercat sa incarci (Ctrl+D Load Crash Dump) ultimul fisier *.dmp din
c:\windows\minidump\?

Bafta



		
__________________________________ 
Do you Yahoo!? 
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/