[pso] Probleme la functia interceptor
mihai sardarescu
pso@cursuri.cs.pub.ro
Thu, 17 Mar 2005 12:00:50 -0800 (PST)
--0-1563695738-1111089650=:39369
Content-Type: text/plain; charset=us-ascii
Salut,
Am intampinat dificultati la functia interceptor. Am folosit functia cum apare in cursul 2:
NTSTATUS interceptor(){
int syscall,syscall_table,syscall_index;
void * old_stack, *new_stack;
_asm mov syscall,eax
syscall_table = syscall>>12;
syscall_index=syscall&0x0FFF;
params = KeServiceDescriptorTable[syscall_table].spt[syscall_index];
//----------------------------------------------
_asm mov old_stack , ebp
_asm add old_stack,8
_asm sub ebp,params
_asm mov new_stack,ebp
memcpy(new_stack,old_stack,params)
f();//vechea functie
}
Cred ca apare o eroare, sau mie cel putin daca adaug partea de sun ------ de mai sus imi crapa sistemul.
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 = 12. Poate gresesc si trebuie sa fie 24.
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 corect.
Orice indicatie ar fi binevenita.
Multumesc,
Mihai.
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
--0-1563695738-1111089650=:39369
Content-Type: text/html; charset=us-ascii
<DIV>Salut,</DIV>
<DIV> </DIV>
<DIV>Am intampinat dificultati la functia interceptor. Am folosit functia cum apare in cursul 2:</DIV>
<DIV> </DIV>
<DIV>NTSTATUS interceptor(){</DIV>
<DIV>int syscall,syscall_table,syscall_index;</DIV>
<DIV>void * old_stack, *new_stack;</DIV>
<DIV>_asm mov syscall,eax</DIV>
<DIV>syscall_table = syscall>>12;</DIV>
<DIV>syscall_index=syscall&0x0FFF;</DIV>
<DIV>params = KeServiceDescriptorTable[syscall_table].spt[syscall_index];</DIV>
<DIV> </DIV>
<DIV>//----------------------------------------------</DIV>
<DIV>_asm mov old_stack , ebp</DIV>
<DIV>_asm add old_stack,8</DIV>
<DIV>_asm sub ebp,params</DIV>
<DIV>_asm mov new_stack,ebp</DIV>
<DIV>memcpy(new_stack,old_stack,params)</DIV>
<DIV>f();//vechea functie</DIV>
<DIV>}</DIV>
<DIV> </DIV>
<DIV>Cred ca apare o eroare, sau mie cel putin daca adaug partea de sun ------ de mai sus imi crapa sistemul.</DIV>
<DIV>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 = 12. Poate gresesc si trebuie sa fie 24.</DIV>
<DIV>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 corect. </DIV>
<DIV>Orice indicatie ar fi binevenita.</DIV>
<DIV> </DIV>
<DIV>Multumesc,</DIV>
<DIV>Mihai.</DIV><p>__________________________________________________<br>Do You Yahoo!?<br>Tired of spam? Yahoo! Mail has the best spam protection around <br>http://mail.yahoo.com
--0-1563695738-1111089650=:39369--