[pso] [tema1][win] Parametrii apelurilor de sistem & return value

Octavian Purdila pso@cursuri.cs.pub.ro
Thu, 17 Mar 2005 10:36:32 -0500


On Wednesday 16 March 2005 07:42 am, Andrei Costin wrote:
> Buna.
>
> Cu loggarea log_packet-urilor m-am lamurit - mersi ptr hints.
>
> Acum am problema extragerii (copierii) parametrilor transmisi.
> Inainte de trap (int 2e), in ebx se pune pointer la adresa din stiva
> user-mode de unde incep parametrii, corect?
>
> Dupa ce se executa int 2e si se ajunge in functia interceptor(),
> parametrii transmisi trebuie sa se gaseasca pe stiva kernel-mode.
> corect? dar care e adresa la care se gaseste inceputul parametrilor
> transmiti?
>

Vezi cursul 2. Daca tot nu te-ai lamurit, pot explica din nou.

> m-am plimbat cu un (char *) intre adresele new_stack si old_stack si
> nu am gasit vreo urma de parametri transmiti de test.exe (am
> modificat putin test.exe sa afiseze parametrii transmisi)
>

Stiva creste in jos, probabil ca nu ai considerat acest lucru.

> La fel intrebare pentru valoarea returnata - in interceptor de unde o
> luam si si cand - inainte sau dupa apelul original_sys_call()?
>

Pai normal dupa, ca inainte nu exista.

> PS logic ar trebui sa o luam dupa apelul original_sys_call(), dar in
> cursul cu interceptarile "..." apar doar inainte de apelul
> originalului - ce sa insemne acest lucru?!
>

Era doar un exemplu. Atentie insa,  apelul de sistem original poate face 
sleep(), asa ca aveti grija la race-uri. Problema e ca in timp ce 
apelul original face sleep, poate sa vina o cerere care sa 
demonitorizez apelul de sistem, asa ca dupa apelul original nu trebuie 
sa mai folositi decat variabile de pe stiva (sau sa stiti ce faceti).


tavi