[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