[pso] Tema 1 Windows apeluri de sistem

Adrian - Razvan Deaconescu pso@cursuri.cs.pub.ro
Thu, 17 Mar 2005 14:30:53 +0200


Salut,

am aceeasi problema care a fost indicata de catre Andrei Costin
referitoare la apelurile de sistem; apelurile de sistem care "ajung"
sau le "deduc" eu in functia de interceptare nu sunt aceleasi cu cele
reale

din cate am inteles in urma operatiilor prezentate la curs:
_asm mov old_stack, ebp
_asm add old_stack, 8
_asm sub esp, params
_asm mov new_stack, esp

memcpy (new_stack, old_stack, params);

ar rezulta ca old_stack si new_stack sunt pozitii in care in mod
normal vom gasi parametri (old_stack este pointer la parametrii
originali si new_stack la zona noua alocata pentru apelul serviciului
de sistem initial)

am incercat sa caut si in sus in jos la ambele stive (in forma *((int
*) old_stack + i) (i este negativ pt cautare in jos)
dar nu este nici urma de parametri (desi ar trebui cautat numai in
sus); care este explicatia? se intampla ceva cu ebp? mai trebuie pus
ceva in continuare la new_stack?

o mica intrebare este care registru retine adresa stivei user dinainte
de int 0x2e? ebx sau edx; in curs si in unele locuri pe Internet este
ebx, dar in test este edx; si mai ciudat este ca atunci cand este edx
se apelata functia interceptor si totul decurge ok (mai putin
parametrii); daca in schimb inlocuiesc cu ebx, nu mai intra in aceasta
functie (KiSystemService face ceva aici?).

Scuze pentru enuntul lung dar am vrut sa fiu cat de cat clar.

Multumesc mult,
Razvan