info@panadisplay.com
Kompyuter dasturida ichki o'rnatilgan funktsiyalarni yig'ish freymlarini aniqlash uchun ro'yxatga olish yoki ma'lumotlar tuzilmasini ko'rsatish

Kompyuter dasturida ichki o'rnatilgan funktsiyalarni yig'ish freymlarini aniqlash uchun ro'yxatga olish yoki ma'lumotlar tuzilmasini ko'rsatish

Apr 22, 2017

Qo'ng'iroqlar to'plami

Kompyuter fanida qo'ng'iroqlar to'plami kompyuter dasturining faol subroutineslari haqidagi ma'lumotni saqlaydigan ma'lumotlar to'plamidir . Ushbu turdagi stack, shuningdek, ijro kompleksi, dastur to'plami , boshqarish stack , ish vaqti yığmi yoki mashina yığmi sifatida ham tanilgan va odatda "stack" uchun qisqartiriladi. Ko'pchilik dasturlarning to'g'ri ishlashi uchun chaqiriq suyakka xizmat ko'rsatish muhim ahamiyatga ega bo'lsa-da, tafsilotlar yuqori darajada dasturlash tillarida odatda maxfiy va avtomatik hisoblanadi. Ko'pgina kompyuter buyruqlar to'plamlari stacklarni boshqarish uchun maxsus ko'rsatmalar beradi.

Qo'ng'iroqlar to'plami bir nechta bilan bog'liq maqsadlar uchun ishlatiladi, biroq buning asosiy sababi, har bir faol subroutin bajarilishini tugallaganda nazoratni qaytarishi kerak bo'lgan nuqtani kuzatib borishdir. Faol subroutine - bu chaqiruvlardan biri, ammo uni ijro etishni tugatib bo'lmaguncha, uni nazorat qilish punktiga qaytarish kerak. Subroutinlarning bunday faollashuvi har qanday darajaga (alohida hol sifatida rekrutiv) joylashtirilishi mumkin, shuning uchun ulardagi strukturasi. Misol uchun, DrawSquare subroutine to'rt xil joydan bir pastki DrawSquare chaqirsa, DrawLine uning bajarilishi tugagandan keyin qayerga qaytib kelishini bilishi kerak. Buni amalga oshirish uchun, chaqiruv ko'rsatmalariga rioya qilingan manzil , qaytarish manzili , har bir chaqiriq bilan chaqiriq suyagiga suriladi.


Mundarija

[ Yashirish ]


Sharh [ tahrir ]

Chaqiriq suyakka to'plam sifatida tashkil etilganligi sababli, chaqiruvchi orqaga qaytish manzilini suyakka tushiradi va u chaqiriqni tugatgandan so'ng, chaqiriqning manzilini o'chiradi yoki olib tashlaydi va boshqaruvni o'sha manzilga o'tkazadi. Agar chaqirilayotgan subroutine yana bir kichik dasturni chaqirsa, dastur qaytadan to'planadigan va dasturdan chiqarib yuborilgan ma'lumotlar bilan boshqa chaqiriq manzilini chaqiradi. Bosish chaqiriq suyakka ajratilgan barcha bo'shliqlarni iste'mol qilsa, odatda dasturning qulashi sababli, ko'plab toshqin deb ataladigan xato yuzaga keladi. Qo'ng'iroqlar to'plamiga subroutinning kiritilishi ba'zan "sariq" deb ataladi; Aksincha, yozuvlarni olib tashlash "ochilmaydi".

Odatda, signalni ishlash yoki kooperativ ko'p vazifani bajarish uchun (masalan, setcontext bilan ) qo'shimcha ishoralar yaratish uchun ishlaydigan dastur bilan bog'liq bo'lgan (yoki undan to'g'ri, har bir topshiriq yoki ish zarrachasi bilan) aniq bir chaqiriq stack bor. Ushbu muhim kontekstda bittagina mavjud bo'lganligi sababli uni "ish" deb atash mumkin; Ammo, Forth dasturlash tilida ma'lumotlar yig'indisi yoki parametr stackiga chaqiriq suyagiga nisbatan aniqroq kiriladi va odatda to'plam deb ataladi (pastga qar.).

Yuqori darajali dasturlash tillarida qo'ng'iroq stackining xususiyatlari odatda dasturchidan yashiriladi. Ular faqat to'plamdagi xotira emas, balki faqat bir qator funktsiyalarga kirish huquqiga ega. Bu ajralmaslikka misol. Aksariyat tillardagi tillar dasturchilarni stackni boshqarish bilan shug'ullanishi kerak. Dasturlarning tilida mavjud bo'lgan kompakt-disklar kompilyatorga , operatsion tizimga va mavjud buyruqlar to'plamiga bog'liq .

Qo'ng'iroqlar to'plamining funktsiyalari [ tahrir ]

Yuqorida ta'kidlab o'tilganidek, qo'ng'iroqlar to'plamining asosiy maqsadi qaytariladigan manzillarni saqlashdir . Subroutin chaqirilganda, keyinchalik qaytadan ko'rsatilishi mumkin bo'lgan ko'rsatmaning joyi (manzili) bir joyda saqlanishi kerak. Qaytish manzilini saqlash uchun to'plamdan foydalanish muqobil chaqiruv konventsiyalari bo'yicha muhim afzalliklarga ega. Ulardan biri, har bir vazifaning o'z ustuniga ega bo'lishi va shuning uchun subroutin reentrant bo'lishi mumkin, ya'ni har xil narsalarni bajaradigan turli vazifalar uchun bir vaqtning o'zida faol bo'lishi mumkin. Yana bir foyda, rekursiya avtomatik tarzda qo'llab-quvvatlanadi. Agar funktsiya o'zini recursively deb atagan bo'lsa, funktsiyaning faollashuvidan keyin uni qaytarish uchun ishlatilishi mumkin bo'lgan funksiyaning har bir faollashuviga qaytish manzili saqlanishi kerak. Stack strukturalari bu imkoniyatni avtomatik ravishda ta'minlaydi.

Til, operatsion tizim va kompyuter muhitiga qarab, qo'ng'iroqlar to'plami qo'shimcha maqsadlarga xizmat qilishi mumkin, masalan, masalan:

Mahalliy ma'lumotlarni saqlash


Agar subroutine tez-tez mahalliy o'zgaruvchilar qiymatlarini saqlash uchun xotira maydoni kerak, faqat faol subroutine ichida ma'lum bo'lgan va qaytgandan keyin qadriyatlarni saqlamaydigan o'zgaruvchilar. Odatda bo'shliqni joylashtirish uchun etarli darajada to'plamni yuqoriga ko'tarib, bu ishlatish uchun joy ajratish juda qulay. Bu dinamik xotira ajratish bilan taqqoslaganda, bu juda tezdir, bu esa yig'im maydonini ishlatadi. Shuni unutmangki, subroutinning har bir alohida faollashuvi mahalliy aholi uchun ajratilgan alohida maydonni oladi.


Parametr o'tish


Subroutines ko'pincha parametrlar uchun qiymatlarni ularni chaqiradigan kod bilan ta'minlashi kerakligini talab qiladi va bu parametrlar uchun bo'sh joy yığılabileceği kam emas. Odatda faqat bir nechta kichik parametrlar mavjud bo'lsa, protsessor registrlari qiymatlarni uzatish uchun ishlatiladi, ammo agar bu bilan ishlash mumkin bo'lgan qo'shimcha parametrlar bo'lsa xotira maydoni kerak bo'ladi. Qo'ng'iroqlar to'plami, bu parametrlar uchun joy sifatida yaxshi ishlaydi, ayniqsa, har bir chaqiruv parametrlar uchun har xil qiymatlarga ega bo'lgan kichik dasturga, bu qadriyatlar uchun qo'ng'iroqlar to'plamida alohida joy beriladi.


Baholash to'plami


Arifmetik yoki mantiqiy operatsiyalar uchun operatsiyalar ko'pincha ro'yxatga olinadi va u erda ishlaydi. Biroq, ayrim hollarda operandlar o'zboshimchalik bilan chuqurlikda to'planishi mumkin, ya'ni registrlardan ko'proq narsa bo'lishi kerak ( registrni to'kib yuborish hollari). Bunday operandlarning to'plami, aksincha, RPN kalkulyatorida bo'lgani kabi, baholash to'plami deb ataladi va qo'ng'iroqlar to'plamida bo'sh joyni egallashi mumkin.


Joriy misol uchun ko'rsatgich


Ba'zi obyektga yo'naltirilgan tillar (masalan, C ++ ), usullarni chaqirganda, bu markerni chaqiriq stackidagi funktsional argumentlar bilan birga saqlang. Ushbu ko'rsatgich chaqiriladigan usul bilan bog'liq ob'ekt misoliga ishora qiladi.


Subroutin kontekstini qamrab olish


Ba'zi dasturiy tillari (masalan, Paskal va Ada ) ichki qoidalarning kontekstiga kirishga ruxsat berilgan ichki pastki dasturlarni e'lon qilishni qo'llab-quvvatlaydi, ya'ni tashqi rutinlar doirasidagi parametrlar va mahalliy o'zgaruvchilar. Bunday statik yuvish takrorlashi mumkin - bu funktsiya ichida e'lon qilingan funktsiyalarda e'lon qilingan funktsiya ... Ilova har qanday statik yuvish darajasida chaqirilgan funktsiyani har bir yopiq ichki joylashish darajasiga qamrab oluvchi ramka bilan murojaat qilishi mumkin bo'lgan vositani ta'minlashi kerak. Odatda bu mos yozuvlar ko'rsatgich tomonidan "yaqin pastga" yoki "statik bog'lanish" deb nomlangan qo'shimcha funktsiyaning eng so'nggi faollashtirilgan nusxasi ramkasida uni darhol qidiruvchiga tegishli bo'lgan "dinamik aloqadan" ajratish uchun amalga oshiriladi ( Statik ota-ona vazifasi bo'lmasligi kerak).


Statik bog'lanish o'rniga, biriktiruvchi statik ramkalarga qilingan murojaatlar kerakli ramkani joylashtirish uchun endeksli bo'lgan ko'rsatkich sifatida ma'lum bo'lgan ko'rsatkichlar majmuasiga to'planishi mumkin. Muntazam chuqurlikning chuqurligi ma'lum bo'lgan doimiy hisoblanadi, shuning uchun muntazam ekranning o'lchami aniqlanadi. Bundan tashqari, harakatlanish uchun mo'ljallangan joylar soni ma'lum, indeksga ham indeks belgilanadi. Odatda muntazam displey o'z stack ramkasida joylashgan, ammo Burroughs B6500 32 turdagi statik joylashtirishni qo'llab-quvvatlaydigan qo'shimcha qurilmani namoyish qildi.


Maydonlarni o'z ichiga olgan ko'rsatuv yozuvlari qidiruvchining ekranining tegishli prefiksidan olinadi. Qayta ishlaydigan ichki tartib-qoida har bir chaqiriq uchun alohida qo'ng'iroqlar ramkalari hosil qiladi. Bunday holatda, ichki rutinning barcha statik aloqalari bir xil tashqi tartibga ishora qiladi.


Boshqa qaytish holati


Qaytish manzili bilan birga, ba'zi muhitlarda subroutin qaytib kelganida tiklanishi kerak bo'lgan boshqa kompyuter yoki dasturiy ta'minot mavjud bo'lishi mumkin. Bu imtiyoz darajasi, istisnolarni ko'rib chiqish ma'lumotlari, arifmetik usullar va shu kabi narsalarni o'z ichiga olishi mumkin. Zarurat bo'lsa, bu qaytarish manzili bo'lgani kabi, qo'ng'iroqlar to'plamida saqlanishi mumkin.


Odatda chaqiriq suyakka qaytish manzili, joylar va parametrlar uchun ( call frame sifatida tanilgan) ishlatiladi. Ba'zi muhitlarda qo'ng'iroqlar to'plamiga tayinlangan vazifalar soni ko'p yoki oz bo'lishi mumkin. Misol uchun, Forth dasturlash tilida odatda faqat qaytish manzili, pastadir parametrlari va indekslarni hisoblab chiqadi va ehtimol mahalliy o'zgaruvchilar chaqiriq suyakka (bu muhitda qaytib suyakka deb ataladi) saqlanadi, ammo har qanday ma'lumotni vaqtinchalik joylashtirish mumkin Qo'ng'iroqlar va qaytib kelgan ehtiyojlar hurmat qilinadigan ekan, maxsus qaytib ishlov berish kodini ishlatish; Parametrlar odatda alohida ma'lumotlar to'plamida yoki parametr stakasida saqlanadi, odatda odatiy ravishda Forth atamasi deb ataladi. Ba'zi Forths-da suzuvchi nuqta parametrlari uchun uchinchi stack bor.

Tuzilma [ tahrir ]

Chaqiriq suyakka joylashtirish

Qo'ng'iroqlar yig'indisi to'plamning ramkasidan iborat ( aktivizatsiya yozuvlari yoki faollashtirish ramkalari ham deyiladi). Ular mashina qaram va ABI- subroutin holat ma'lumotlarini o'z ichiga olgan ma'lumotlar bazasiga bog'liq. Ushbu ma'lumotlar ba'zan CFI (Call Frame Information) deb ataladi. [1] Har bir tayanch freymi qaytarish bilan hali tugatilmagan bir kichik protokolga mos keladi. Misol uchun, DrawLine nomli subroutine hozirda ishlayotgan bo'lsa, pastki DrawSquare tomonidan chaqirilganda, chaqiriq suyakka ustki qismi o'ngdagi rasmda tasvirlangan bo'lishi mumkin.

Bunga o'xshash diagramma yuqori tomonga joylashtirilgandan buyon har ikki yo'nalishda ham chizilgan bo'lishi mumkin, shuning uchun to'plamning o'sishi yo'nalishi tushuniladi. Bunga qo'shimcha ravishda, mustaqil ravishda, arxitekturalar chaqiriq stacks yuqori manzili yoki pastki manzili qarshisida farq qiladi. Diagrammaning mantiqi manzilni tanlashdan mustaqildir.

Yig'ning yuqori qismidagi yig'im ramkasi hozirgi tartib-qoida uchun. Ichki qatlam odatda kamida quyidagi narsalarni o'z ichiga oladi (surish tartibida):

  • Muntazam (agar mavjud bo'lsa) o'tkaziladigan argumentlar (parametr qiymatlari);

  • (Masalan, " DrawLine to'plamining ramkasida, " DrawSquare " kodiga manzil); Va

  • Muntazam mahalliy o'zgaruvchilar uchun joy (agar mavjud bo'lsa).

Stack va ramka ko'rsatkichlari [ tahrir ]

Har xil vazifalar orasidagi muayyan funktsiyalar orasidagi farqlar kabi, ramka o'lchamlari farqli bo'lishi mumkin bo'lsa, stackdan bir ramkani ochish stack pointerning aniq bir qisqartirishni tashkil etmaydi. Funktsiyalar qaytarilganda, stack pointer uning o'rniga ramka pointeriga qayta tiklanadi, bu funksiya oldin chaqiruv ko'rsatgichining qiymati hisoblanadi. Har bir ustunli ramkada darhol pastdan yuqoriga qaratilgan stack pointer mavjud. Yon suzgichi hamma chaqiruvlar bilan birgalikda almashiladigan o'zgaruvchan ro'yxatdir. Funktsiyani chaqirishning ramka belgisi - bu funksiya chaqirilgandan oldingi kabi, ustun ko'rsatgichining nusxasi. [2]

Ramkalardagi barcha boshqa joylarning joylari ramkaning ustki qismiga, ya'ni stack pointerining salbiy tomonlari yoki ramka ustki qismiga nisbatan ramka pochterining ijobiy o'chirilishi sifatida tavsiflanadi. Chasm ko'rsatgichining joylashuvi, aslida, stack pointerning salbiy ofseti sifatida aniqlanishi kerak.

Manzilni qidiruvchining ramkaga saqlash [ tahrir ]

Ko'pgina tizimlarda stack frameda chastotadagi ko'rsatgichlar registrining oldingi qiymatini o'z ichiga oladigan maydon mavjud bo'lib, qo'ng'iroq qiluvchi ijro etilganda uning qiymati bor edi. Misol uchun, DrawLine yig'indisi ramkasi DrawSquare dan foydalanadigan ramka ko'rsatgich qiymatini ushlab turgan xotira joyiga ega bo'ladi (yuqoridagi diagrammada ko'rsatilmaydi). Qiymat pastki dasturga kiritilgandan so'ng saqlanadi va qaytgandan keyin tiklanadi. Yon suzgichdagi ma'lum bir joyga bunday maydonga ega bo'lish kodni hozirgi bajarilayotgan muntazam ramkaning ostidagi ketma-ketlikdagi har bir freymga kirishga imkon beradi va shuningdek, muntazam kvadrat ko'rsatkichni qidiruvchining kvadratiga qaytarishdan oldin osongina qayta tiklashga imkon beradi.

Lexicik ichki tartiblar [ tahrir ]

Qo'shimcha ma'lumot: Yadro funktsiyasi va mahalliy bo'lmagan o'zgaruvchan

Ichki pastki dasturlarni qo'llab-quvvatlovchi dasturlash tillari, shuningdek, chaqiruv ramkasida joyga ega bo'lib, bu amaliyotning eng so'nggi faollashuvini aks ettiradi. Bunga erkin foydalanish havolasi yoki statik aloqalar (dinamik va o'zboshimchalik bilan qo'ng'iroqlarni amalga oshirishda statik joylashuvni kuzatib turadigan) deb ataladi va u har qanday ichki tuzilishdagi o'z ichiga olgan dasturlarning mahalliy ma'lumotlariga kirishni ta'minlaydi (muntazam ravishda) Darajasi. Ba'zi mimariler, derleyiciler yoki optimallash hollari, har bir mahkamlash darajasiga bitta havolani saqlab qoladi (shunchaki darcha emas), shuning uchun quyuq ma'lumotlarga ega bo'lgan chuqur ichki jadvallar bir nechta yo'nalishlarga o'tishga hojat yo'q; Ushbu strategiya ko'pincha "displey" deb ataladi. [3]

Masalan, argumentlar va qaytariladigan qiymatlar bilan bog'laydigan sof funktsiyalarda bo'lgani kabi, ichki funktsiyalar indeksdagi biron-bir (doimiy bo'lmagan) mahalliy ma'lumotlarga kirmasa, erkin ulanishlar optimallashtirilishi mumkin. Burroughs katta tizimlar kabi ba'zi bir tarixiy kompyuterlar, ichki o'rnatilgan funksiyalarni qo'llab-quvvatlash uchun maxsus "ekran registrlari" mavjud edi. Aksariyat zamonaviy mashinalar uchun kompilyatorlar (masalan, har joyda x86) kerak bo'lsa, ko'rsatkichlar uchun stackka bir nechta so'zni qo'yib yuboradi.

O'zgarishlar [ tahrir ]

Ba'zi maqsadlar uchun subroutinning va uning chaqiruvchisining tayanch ramkalari bir-biri bilan chambarchas bog'langan deb hisoblanishi mumkin, bunda parametrlarni qidiruvchidan xotiraga o'tkaziladigan maydonni tashkil etadi. Ba'zi joylarda qo'ng'iroq qiluvchining har bir dalilni suyakka tushiradi, shuning uchun uning katakchasini kengaytiradi, so'ngra chalvirni chaqiradi. Boshqa muhitlarda, qo'ng'iroq qiluvchining da'vat qilayotgan boshqa argumentlarni argumentlarni ushlab turish uchun stack freymining yuqori qismida oldindan ajratilgan maydon mavjud. Bu maydon ba'zan ketgan argumentlar maydoni yoki maydon nomi deb ataladi. Ushbu yondashuv doirasida, maydon o'lchamini kompilyator tomonidan har qanday subroutin tomonidan talab qilinadigan eng katta deb hisoblanadi.

Foydalanish [ tahrir ]

Veb-saytni qayta ishlash [ tahrir ]

Odatda, chaqiriqni chaqirish uchun kichik dasturga kerak bo'lgan chaqiriqni yig'ish manipulyatsiyasi minimaldir (bu juda yaxshi, chunki har bir subroutine uchun chaqiriladigan qo'ng'iroqlar uchun saytlar bo'lishi mumkin). Haqiqiy dalillar uchun qiymatlar chaqiriq saytida baholanadi, chunki ular ma'lum bir chaqiriqqa xos bo'lib, yoki ishlatilgan chaqiruv konventsiyasi tomonidan aniqlanganidek, to'plamga surilib yoki ro'yxatga olinadi. Keyinchalik, "filial va aloqa" kabi haqiqiy chaqiruv ko'rsatmasi, odatdagidek, tekshiruvni maqsad subroutinin kodiga o'tkazish uchun bajariladi.

Subroutinani kiritish jarayoni [ tahrir ]

Qo'ng'iroq qilingan subroutineda, bajarilgan birinchi kod odatda muntazam bayonotlari uchun koddan oldin kerakli tozalashni amalga oshiradigan uchun subroutine prologue deb ataladi.

Prologiya, odatda, chaqiriq suyakka qiymatni bosib, chaqiriq ko'rsatmasi orqali ro'yxatga kiritilgan qaytish manzilini saqlab qoladi. Xuddi shunday, joriy yigit pointer va / yoki ramka ko'rsatgichlari qiymatlari itilebilir. Shu bilan bir qatorda, ba'zi ko'rsatmalarni o'rnatish me'morchiligi avtomatik ravishda chaqiriq ko'rsatmalarining o'zi tomonidan o'xshash funksiyalarni ta'minlaydi va bunday muhitda prologga bunday qilish kerak emas.

Chiziq ko'rsatgichlari ishlatilayotgan bo'lsa, prolog odatda ramka ko'rsatgichi registrining yangi qiymatini suyakka ishora qiluvchi orqali o'rnatadi. Lokal o'zgaruvchilar uchun stackdagi bo'shliq, keyinchalik ketma-ketlikda stack pointer-ni o'zgartirish orqali ajratilishi mumkin.

Forth dasturlash tili chaqiriq suyakka aniq sarflashga imkon beradi (u erda "orqaga qaytish" deb nomlanadi).

Qaytish jarayoni [ tahrir ]

Subroutin qaytishga tayyor bo'lsa, prologning qadamlarini bekor qiluvchi epilogni ijro etadi. Bu, odatda, saqlangan jurnali qiymatlarini (ramka ko'rsatgichi qiymati kabi) qutb ramkasidan qayta tiklaydi, barcha to'plam ramkasini stack pointer qiymatini o'zgartirib, to'plamdan o'chiradi va nihoyat qaytarish manzilidagi buyruqqa bo'linadi. Ko'pgina qo'ng'iroq konvensiyalari ostida epilog tomonidan to'plamdan chiqarilgan narsalar dastlabki dalillar qiymatlarini o'z ichiga oladi, bu holatda odatda chaqiruvchi tomonidan bajarilishi kerak bo'lgan qo'shimcha yig'ma manipulyatsiya mavjud emas. Biroq, ayrim chaqiruv konventsiyalari bilan, da'vogarning qaytib kelgandan keyin argumentlarni stackdan olib tashlash vazifasi bor.

Unwinding [ tahrir ]

Qabul qilingan funktsiyadan qaytib, to'plamni yuqori qismini o'chirib qo'yishi mumkin, ehtimol qaytish qiymati qoldiriladi. Dasturning boshqa bir joyida bajarilishini davom ettirish uchun to'plamdan bir yoki bir nechta kvadratni haydashning umumiy harakati " stack unwinding" deb ataladi va istisno ishlatishda ishlatiladigan lokal boshqaruv tuzilmalari foydalanilganda bajarilishi kerak. Bunday holda, funktsiyani biriktirish ramkasi istisno ishlovchilarini bildiradigan bir yoki bir nechta yozuvlarni o'z ichiga oladi. Istisno qilinayotganda, istisnaning turini ko'rib chiqish (qo'lga olish) uchun tayyorlangan ishlovchilar topilmaguncha, to'plam ochiladi.

Ba'zi tillarda bosh tortishni talab qiladigan boshqa nazorat tuzilmalari mavjud. Paskal global tekshiruvni ichki o'rnatilgan funktsiyadan nazorat qilishni va oldindan chaqirilgan tashqi funktsiyaga o'tkazish imkonini beradi. Ushbu operatsiyani bajarish, to'plamni tashqi funktsiyani ichidagi maqsad deklaratsiyasiga o'tkazish uchun mos kontekstni qayta tiklash uchun kerak bo'lganda ko'p sonli ramkalarni olib tashlashni talab qiladi. Xuddi shunday, C-da setjmp va longjmp funksiyalari mavjud. Common Lisp , to'plamni ochishdan saqlaydigan maxsus operator yordamida to'plangan holda nima sodir bo'lishini nazorat qilish imkonini beradi.

Davomni qo'llashda, stack (mantiqiy ravishda) ochiladi va keyin davom ettirish to'plami bilan qayta ishlanadi. Bu davomiylikni amalga oshirishning yagona usuli emas; Masalan, bir nechta aniq ketma-ketlikdan foydalanib, davom etishni amalga oshirish uning stackini faollashtirishi va o'tkaziladigan qiymatni shamollashi mumkin. Sxema dasturlash tili , davom ettirish chaqirilganda nazorat to'plamining "ochish" yoki "qaytib olish" haqida tasodifiy holatlarda o'zboshimchalik bilan teshiklarni bajarishga imkon beradi.

Tekshirish [ tahrir ]

Shuningdek qarang: Profiling (kompyuter dasturlash)

Qo'ng'iroqlar to'plami ba'zan dastur ishlayotgani bois tekshirilishi mumkin. Dasturning qanday yozilishi va olinganligiga qarab, oraliqdagi ma'lumotlar va oraliq qiymatlarni va funktsiya chaqiruv izlarini aniqlash uchun foydalanish mumkin. Bu birinchi darajali takomillashtirishni amalga oshirish uchun nozik taneli avtomatlashtirilgan testlarni yaratish uchun ishlatilgan [4] va Ruby va Smalltalk kabi hollarda. Masalan, GNU tuzatuvchisi (GDB) ishlaydigan chaqiriq stackining interaktiv tekshiruvini amalga oshiradi, biroq to'xtatildi, C dasturi. [5]

Qo'ng'iroqlar to'plamining muntazam namunalarini olish dasturlarning ish faoliyatini tartibga solish uchun foydali bo'lishi mumkin, chunki agar chaqiruv stekasidagi ma'lumotlarni sinchkovlik bilan bir necha marta ko'rishda kichik protsessor ko'rsatgichi paydo bo'lsa, u kodning darz ketishi va ishlash muammolari uchun tekshirilishi kerak.

Xavfsizlik [ tahrir ]

Asosiy maqola: Stack buffer overflow

Erkin ko'rsatgichlar yoki tekshirilmagan qatorlar (masalan, C) bilan yozilgan tilda kodning bajarilishiga ta'sir qiluvchi boshqarish oqimi ma'lumotlarini (qaytarish manzillari yoki saqlangan ramka ko'rsatkichlari) va oddiy dastur ma'lumotlarini (parametrlar yoki qaytarish qiymatlari) aralashtirish ) Bir chaqiriq suyakka bo'lib, bu ommaviy toshmalarning eng keng tarqalgan turi sifatida to'plam tampon toshmalaridan foydalanish mumkin bo'lishi mumkin.

Bunday hujumlardan biri o'zboshimchalik bilan ishlaydigan kod bilan bir tamponni to'ldirishni va keyin bir yoki bir nechta boshqa buferni to'g'ridan-to'g'ri bajariladigan kodga ishora qiluvchi qiymat bilan qayta yozish uchun bir yoki bir nechta buferni to'ldirishni o'z ichiga oladi. Natijada, funktsiya qaytarsa, kompyuter ushbu kodni bajaradi. Ushbu turdagi hujumlar W ^ X bilan osongina bloklanishi mumkin. Shu kabi hujumlar, W ^ X himoyasi yoqilgan bo'lsa ham, shu jumladan, qaytariladigan libc hujumi yoki orqaga yo'naltirilgan dasturlashdan kelib chiqqan hujumlar ham muvaffaqiyatli bo'lishi mumkin. Fors dasturlash tilida bo'lgani kabi, ketma-ketlarni qaytib suyakka to'liq ajratib turadigan joylarda saqlash kabi turli xil mitigatsiya taklif qilingan. [6]