[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/