4.2.4 Xotiraning amaliy xavfsizligi
4.2.3 Xotira xavfsizligi ta'rifi
1 ta
belgi
*c = malloc(26); 2
belgi
*d = c; 3 bepul(d); 4 //
buzilish, chunki c endi haqiqiy
ob'ektga ishora qilmaydi
5 c[23] =
'A';
36
4 Xotira va tur xavfsizligi
Machine Translated by Google
mumkin emas. Ish vaqti tizimiga ma'lumotlarni aniq bo'shatish va
qaytarishning hech qanday usuli yo'q, xotira axlat yig'ish orqali
bilvosita qayta tiklanadi. Ish vaqti tizimi qo'shimcha tekshiruvlar
(masalan, chegaralarni tekshirish) orqali xotirani kuchaytiradi va
foydalanilmagan xotirani passiv ravishda qayta tiklash uchun axlat yig'uvchini eskiradi.
Shuni esda tutingki, Java aniq turdagi xavfsizlik tekshiruvlari bilan turdagi xavfsizligini
ham ta'minlaydi.
37
4 Xotira va tur xavfsizligi
Rust uchun qattiq turdagi tizim va egalik xotira va turdagi xavfsizlikni amalga
oshiradi. Ma'lumotnomalar o'zgaruvchilar bilan bog'langan va aniq egalik
ma'lumotlar poygasidan himoya qiladi: bitta o'zgaruvchan havola yoki nol yoki
ko'proq o'zgarmas havolalar. O'zgaruvchilar doiradan chiqib ketganda xotira
qayta tiklanadi. Qizig'i shundaki, ushbu kafolatlarning ko'pchiligi kompilyator
tomonidan amalga oshirilishi mumkin, bu esa nol xarajat abstraktsiyalariga olib
keladi.
C/ C++ uchun xotira xavfsizligiga erishishning ikkita yondashuvi mavjud: yo
dialekt yaratish orqali xavfli xususiyatlarni olib tashlash yoki asboblar yordamida
xavfli xususiyatlardan foydalanishni himoya qilish.
Dialektlar C/C++ tilini xavfsiz ko'rsatkichlar bilan kengaytiradi va tarqalishning
qat'iy qoidalarini qo'llaydi. Cyclone [12] C dasturlash tilini ko'rsatgich arifmetikasini
cheklash, NULL tekshiruvlarini qo'shish, yig'ish uchun axlat yig'ish va stek uchun
mintaqaning ishlash muddatini (Rustning ishlash muddati uchun ilhomlantiruvchi
manbalardan biri), konversiyalarni cheklash uchun teglangan birlashmalardan
foydalanish orqali xavfsiz kichik to'plam bilan cheklaydi. ko'rsatkichlarni bo'lish
Haskell yoki OCaml kabi tizim bo'lmagan funktsional tillar xotira buzilishiga
e'tibor bermaydilar, chunki ular havolalar tushunchasini talab qilmaydi, balki
ma'lumotlar va boshqaruvni boshqa shakllarda uzatadi. Tilga asoslangan
xavfsizlik bo'yicha qisqacha muhokama uchun 6.2-bo'limga qarang.
Machine Translated by Google
Xavfli xususiyatlardan foydalanishni himoya qilish uchun barcha jonli
ob'ektlar va ko'rsatkichlarni kuzatib borish, har bir ko'rsatkich bilan
chegaralarni va har bir xotira ob'ekti bilan jonlilikni bog'lash uchun ish
vaqti tizimi kerak . Har bir ko'rsatkichni yo'qotish uchun chegaralar va
jonlilik tekshiruvi xotiraga kirishning haqiqiyligini ta'minlaydi. Ko'rsatgichni
tayinlash uchun ko'rsatgich tayinlangan havola chegaralarini meros qilib oladi.
uch sinf normal, hech qachon NULL, yog'li ko'rsatgichlar va o'rnini bosuvchi
setjmp (setjmp maxsus holatlarni ko'rib chiqishning arxaik shaklini
ta'minlaydi, ishlab chiquvchiga qaytish nuqtasini yozib, so'ngra talab
bo'yicha o'sha nuqtaga o'tish imkonini beradi) istisnolar va polimor fizma
bilan . Siklon ham fazoviy, ham vaqtinchalik xotira xavfsizligini ta'minlaydi.
CCured [23] shunga o'xshash g'oyaga amal qiladi va markerni belgilash
va ko'rsatgichni kuzatish xarajatlarini kamaytirish uchun ko'rsatgichni
xulosa qilish tizimini joriy qiladi. Xuddi shunday, C++ 1X kabi zamonaviy
C++ variantlari ishlash muddatini kuzatish uchun maÿlumotnomalar va
xotira obÿyektlari uchun qatÿiy egalikdan foydalanadigan xotira xavfsiz
kichik toÿplamini qoÿllab-quvvatlaydi . Faqat xavfsiz kichik to'plamlardan
foydalanilganda, C++ xotira (va turi) xavfsiz bo'lishi mumkin.
4 Xotira va tur xavfsizligi
38
SoftBound [21] C/C++ uchun fazoviy xotira xavfsizligini taÿminlash uchun
kompilyatorga asoslangan asbobdir . Umumiy g'oya barcha ko'rsatkichlar
haqidagi ma'lumotlarni ko'rsatgichning joylashuvi bo'yicha indekslangan
ajratilgan metama'lumotlarda saqlashdir. Yondashuvning salbiy tomoni
SPEC CPU2006 uchun 67% ni tashkil etadi.
Machine Translated by Google
Kod misoli SoftBound uchun asboblarni ko'rsatadi.
CETS [22], SoftBound uchun kengaytma, temporalni amalga oshiradi
Ko'rsatkich o'qish yoki yozish uchun bekor qilinganda ,
chegaralar tekshiriladi.
1
Do'stlaringiz bilan baham: |