Comutarea stivei

Atunci când apelați o procedură de nivel mai privilegiat, se efectuează următoarele:

Inelele de securitate interne (nivelurile privilegiilor 0, 1 și 2) au propriile lor stive pentru a primi apeluri de la nivele mai puțin privilegiate. Dacă teancul avea să furnizeze procedura de apelare și teancul era prea mic, procedura care rezultă ar putea eșua din cauza unei mărimi insuficiente a stivei. Prin urmare, protecția programelor mai privilegiate de eșecul datorat programelor mai puțin privilegiate este asigurată prin crearea unui nou stiva atunci când se solicită prin proceduri mai puțin privilegiate cele mai privilegiate. Se creează o nouă stivă, parametrii de apel sunt copiați de la vechea stack la cea nouă și se salvează valorile registrelor, după care continuă execuția obișnuită a procedurii chemate. Când reveniți din această procedură, conținutul registrelor stocate este restabilit în stiva inițială. O descriere completă a mecanismului de comutare a sarcinilor este prezentată în Capitolul 7.







Procesorul găsește un loc pentru a crea stive noi utilizând segmentul de stare a sarcinii (TSS), așa cum se arată în Figura 6-8. Fiecare sarcină are propriul TSS. TSS conține indicatorii inițiali ai stiva pentru inele de protecție interioară. Sistemul de operare este responsabil pentru crearea fiecărui TSS și inițializarea indicatorilor corespunzători stack-ului. Indicatorul inițial de stivă constă dintr-un selector de segmente și valoarea inițială a registrului ESP (offsetul inițial din segment). Indicatorii stack-ului sursă sunt valori doar pentru citire. Procesorul nu le schimbă în timpul executării sarcinilor. Acești indicatori de stivă sunt folosiți numai pentru a crea stive noi când efectuați apeluri de procedură cu un nivel de privilegiu mai mare. Când vă întoarceți din procedurile chemate, aceste stive dispar. Data viitoare când procedura este chemată, se creează un nou stiblu folosind indicatorul inițial de stack pentru acest lucru.







Dacă doriți să transferați mai mult de 31 de cuvinte duble de date la procedura apelată, unul dintre parametri poate fi făcut un pointer la structura de date sau valorile SS și ESP înregistrate în el pot fi folosite pentru a accesa parametrii din vechea zonă a stivei. În timpul unei proceduri de apelare cu un alt nivel de privilegii, procesorul efectuează următoarele acțiuni asociate stivei:

Figura 6-9 prezintă cadrele stivei înainte, în timpul și după un apel reușit și returnează între proceduri cu diferite nivele de privilegii.

TSS nu are un pointer de stivă pentru un teanc cu un nivel de privilegiu de 3, deoarece procedura cu nivelul de privilegii 3 nu poate fi cauzată de o procedură cu un nivel chiar mai scăzut. Stackul pentru nivelul de privilegii 3 este protejat de conținutul registrelor SS și EIP, care sunt stocate în teancul nivelului privilegiat cauzat de stratul 3.

Un apel utilizând gateway-ul de apel nu verifică valorile cuvintelor care sunt copiate în noul stiva. Procedura chemată trebuie să verifice valabilitatea fiecărui parametru. Următoarele secțiuni discută modul de utilizare a comenzilor ARPL, VERR, VERW, LSL și LAR pentru a verifica valorile indicatoarelor.







Articole similare

Trimiteți-le prietenilor: