[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>&nbsp;</DIV>
<DIV>Am intampinat dificultati la functia interceptor. Am folosit functia cum apare in cursul 2:</DIV>
<DIV>&nbsp;</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&gt;&gt;12;</DIV>
<DIV>syscall_index=syscall&amp;0x0FFF;</DIV>
<DIV>params = KeServiceDescriptorTable[syscall_table].spt[syscall_index];</DIV>
<DIV>&nbsp;</DIV>
<DIV>//----------------------------------------------</DIV>
<DIV>_asm mov old_stack , ebp</DIV>
<DIV>_asm &nbsp;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>&nbsp;</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&nbsp;ce valoare are&nbsp;params si am descoperit ca pentru NtOpenMutant are valoarea 24, desi functia are doar 3 parametrii. Din ce intelesesem eu ar fi trebuit sa&nbsp;aiba valoarea&nbsp;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.&nbsp;</DIV>
<DIV>Orice indicatie ar fi binevenita.</DIV>
<DIV>&nbsp;</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--