[pso] Tema 1 Windows apeluri de sistem

Octavian Purdila pso@cursuri.cs.pub.ro
Thu, 17 Mar 2005 15:06:34 -0500


On Thursday 17 March 2005 07:30 am, Adrian - Razvan Deaconescu wrote:
> 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);
>

Am verificat din nou pe sursele implementarii mele si operatiile sunt 
corecte.

> 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?
>

E posibil sa fie o problema cu epb-ul. Cum arata functia dezasamblata? 

> 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?).
>

Da, in curs e ebx, pentru ca in cartea din bibliografie aparea ebx si 
i-am crezut pe cuvant atunci cand am facut cursul respectiv. Dar in 
realitate, e edx (ca sa va convingeti si singuri puteti dezasambla 
niste apeluri de sistem din ntdll.dll).

tavi