Стековий кадр (від англ. stack frame) — механізм передавання аргументів і виділення тимчасової пам'яті (в процедурах мов програмування високого рівня) з використанням системного стека.
Технологія
Зазвичай системний стек використовується для зберігання адрес повернення при виклику підпрограм, а також збереження/відновлення значень регістрів процесора.
Передача аргументів
При виклику процедури аргументи надсилаються в стек, і тільки потім керування передається у процедуру. Таким чином, процедура отримує стек, на вершині якого лежить адреса повернення, а під нею — аргументи, з якими її викликано.
При поверненні з процедури (або після нього, див. нижче) аргументи повинні бути зняті зі стека.
Виділення тимчасової пам'яті
Якщо вказівник стека змістити «вище» (у бік збільшення стека), то частина пам'яті в стеку виявиться невикористаною (зокрема й при виклику третьої процедури) і може використовуватися на потреби процедури, аж до моменту повернення на місце виклику. Таким чином, мови високого рівня організовують змінні, що існують тільки всередині процедури (у мові Сі їх називають «автоматичними»).
Перед поверненням процедура має повернути вказівник стека в початкове положення (тобто на адресу повернення).
Домовленості для різних мов програмування
Різні компілятори мов високого рівня по-різному підходять до організації стекового кадру залежно від особливостей апаратної платформи й стандартів конкретної мови. Основні відмінності стосуються порядку передавання аргументів у стек і їх зняття зі стека при поверненні.
Недоліки стекового кадру
Стековий кадр — зручна технологія виділення тимчасової пам'яті для передавання довільного числа аргументів або внутрішнього використання. Однак вона має низку недоліків.
Продуктивність
Передавання даних через пам'ять без необхідності уповільнює виконання програми (порівняно з програмами мовою асемблера, в яких більшість аргументів і тимчасових даних розміщують у регістрах процесора).
Для зменшення звернень до локальних змінних програма оптимізується при компіляції для використання регістрів замість змінних у пам'яті або для зберігання їхніх проміжних значень.
Деякі мови використовують домовленості щодо виклику, що підтримують передавання цілочисельних аргументів через регістри.
Безпека
Стековий кадр перемежовує дані програми з критичними даними — вказівниками, значеннями регістрів і адресами повернення. Це, в поєднанні з архітектурними особливостями деяких процесорів (а саме — напрямком зростання стека), робить дуже легко досяжним зловмисне перекриття критичних даних внаслідок переповнення буфера (зрозуміло, перш за все, програма має містити помилку, яка дозволить виконати переповнення).
Такий «невдалий», з погляду переповнення буфера, напрямок зростання машинного стека мають апаратні платформи x86.
Атака з переповнення буфера в стеку зазвичай реалізується так:
- Програма, що атакує, надсилає на мережеве з'єднання (або інший засіб міжпроцесної взаємодії) блок даних, свідомо більший від розміру буфера цільової програми.
- Неправильно написана (вразлива) процедура дозволяє записати зайві дані за межі буфера (тобто, допускає його переповнення), через початок стекового кадру й адресу повернення. Блок даних скомпонований так, щоб адреса повернення в стеку заміщалася адресою коду експлойта, який міститься в тому ж завантаженому блоці даних (виконання цього коду з привілеями виконуваної програми і є метою атаки).
- При поверненні з уразливої процедури, керування через змінену адресу повернення передається на код експлойта.
Див. також
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Stekovij kadr vid angl stack frame mehanizm peredavannya argumentiv i vidilennya timchasovoyi pam yati v procedurah mov programuvannya visokogo rivnya z vikoristannyam sistemnogo steka TehnologiyaTipovij vipadok vikoristannya steka v programi movoyu visokogo rivnya na prikladi vikliku proceduri z argumentami A B C z ugodami vikliku cdecl u porivnyanni z movoyu asemblera Zazvichaj sistemnij stek vikoristovuyetsya dlya zberigannya adres povernennya pri vikliku pidprogram a takozh zberezhennya vidnovlennya znachen registriv procesora Peredacha argumentiv Pri vikliku proceduri argumenti nadsilayutsya v stek i tilki potim keruvannya peredayetsya u proceduru Takim chinom procedura otrimuye stek na vershini yakogo lezhit adresa povernennya a pid neyu argumenti z yakimi yiyi viklikano Pri povernenni z proceduri abo pislya nogo div nizhche argumenti povinni buti znyati zi steka Vidilennya timchasovoyi pam yati Yaksho vkazivnik steka zmistiti vishe u bik zbilshennya steka to chastina pam yati v steku viyavitsya nevikoristanoyu zokrema j pri vikliku tretoyi proceduri i mozhe vikoristovuvatisya na potrebi proceduri azh do momentu povernennya na misce vikliku Takim chinom movi visokogo rivnya organizovuyut zminni sho isnuyut tilki vseredini proceduri u movi Si yih nazivayut avtomatichnimi Pered povernennyam procedura maye povernuti vkazivnik steka v pochatkove polozhennya tobto na adresu povernennya Domovlenosti dlya riznih mov programuvannyaRizni kompilyatori mov visokogo rivnya po riznomu pidhodyat do organizaciyi stekovogo kadru zalezhno vid osoblivostej aparatnoyi platformi j standartiv konkretnoyi movi Osnovni vidminnosti stosuyutsya poryadku peredavannya argumentiv u stek i yih znyattya zi steka pri povernenni Nedoliki stekovogo kadruStekovij kadr zruchna tehnologiya vidilennya timchasovoyi pam yati dlya peredavannya dovilnogo chisla argumentiv abo vnutrishnogo vikoristannya Odnak vona maye nizku nedolikiv Produktivnist Peredavannya danih cherez pam yat bez neobhidnosti upovilnyuye vikonannya programi porivnyano z programami movoyu asemblera v yakih bilshist argumentiv i timchasovih danih rozmishuyut u registrah procesora Dlya zmenshennya zvernen do lokalnih zminnih programa optimizuyetsya pri kompilyaciyi dlya vikoristannya registriv zamist zminnih u pam yati abo dlya zberigannya yihnih promizhnih znachen Deyaki movi vikoristovuyut domovlenosti shodo vikliku sho pidtrimuyut peredavannya cilochiselnih argumentiv cherez registri Bezpeka Stekovij kadr peremezhovuye dani programi z kritichnimi danimi vkazivnikami znachennyami registriv i adresami povernennya Ce v poyednanni z arhitekturnimi osoblivostyami deyakih procesoriv a same napryamkom zrostannya steka robit duzhe legko dosyazhnim zlovmisne perekrittya kritichnih danih vnaslidok perepovnennya bufera zrozumilo persh za vse programa maye mistiti pomilku yaka dozvolit vikonati perepovnennya Takij nevdalij z poglyadu perepovnennya bufera napryamok zrostannya mashinnogo steka mayut aparatni platformi x86 Ataka z perepovnennya bufera v steku zazvichaj realizuyetsya tak Programa sho atakuye nadsilaye na merezheve z yednannya abo inshij zasib mizhprocesnoyi vzayemodiyi blok danih svidomo bilshij vid rozmiru bufera cilovoyi programi Nepravilno napisana vrazliva procedura dozvolyaye zapisati zajvi dani za mezhi bufera tobto dopuskaye jogo perepovnennya cherez pochatok stekovogo kadru j adresu povernennya Blok danih skomponovanij tak shob adresa povernennya v steku zamishalasya adresoyu kodu eksplojta yakij mistitsya v tomu zh zavantazhenomu bloci danih vikonannya cogo kodu z privileyami vikonuvanoyi programi i ye metoyu ataki Pri povernenni z urazlivoyi proceduri keruvannya cherez zminenu adresu povernennya peredayetsya na kod eksplojta Div takozhStek Perepovnennya bufera Pogodzhennya viklikiv