Bosh sahifa Wiki Segmentation Fault

Segmentation Fault

Segmentation Faultprocess ruxsat etilmagan virtual memory addressga yoki noto‘g‘ri access turida murojaat qilganda operatsion tizim yuboradigan fault/signal turi.

Fault sabablari

Sabab null/dangling pointer, out-of-bounds, read-only pagega write, NX page’da execute yoki stack overflow bo‘lishi mumkin. “Segfault” ildiz sabab emas, access rad etilgan natijadir.

Kernel qarori

CPU page fault beradi; kernel mapping va permissionni tekshiradi. Demand paging bo‘lsa page yuklanadi, noqonuniy access bo‘lsa processga SIGSEGV yoki platform exception yetkaziladi.

Crash metadata

Fault address va error code read/write/execute, user/kernel va present/not-present farqini ko‘rsatadi. Crash handler register, PC, module va stack trace’ni saqlaydi.

Recovery

Signal handler ayrim recovery qilishi mumkin, ammo buzilgan memory invariantdan keyin umumiy davom etish xavfli. Guard-page stack growth kabi maxsus faultlar runtime tomonidan boshqariladi.

Core dump

Core dump sensitive memory va secretlarni o‘z ichiga olishi mumkin; retention va access control zarur. Symbolization aynan mos build-idli debug fayl bilan bajariladi.

Test

Test intentional invalid access, stack guard, JIT NX, handler va multithread crashni qamraydi. Sanitizer faultdan oldin aniqroq sabab berishi mumkin.

Amaliy nazorat

Segmentation Fault bilan ishlaydigan tizim fault address, access type va mappingni aniq lifecycle va version bilan yuritadi. Pointer, mapping, navbat yoki exception holati boshqa qatlamga uzatilganda ownership hamda permission shartlari yo‘qolmaydi. Debug rejimda manzil, obyekt identifikatori va state transition qayd etiladi; production log ASLR, maxfiy ma’lumot va raw pointerlarni ochib yubormaydigan shaklga keltiriladi. Eskirgan handle yoki metadata reuse qilinmasligi uchun generation, build-id yoxud reference hisobidan foydalaniladi.

Muhim xavf — segfaultni ildiz sabab deb cheklash. Bunday vaziyatda tizim taxmin bilan davom etmaydi: access fault, aniq error, konservativ fallback yoki nazoratli cleanup qo‘llanadi. Signal/fault kelgan nuqta har doim asl buzilish joyi emas; allocation, mapping va oxirgi ownership amallari trace’i tashxisga yordam beradi. Parallel accessda lock, atomic ordering va lifetime birgalikda tekshiriladi. Timeout yoki null check memory safetyning o‘rnini bosa olmaydi.

Sifat nazorati core dump va intentional fault testi orqali bajariladi. Sinovlar normal holat bilan birga nol uzunlik, page boundary, alignment, juda katta offset, concurrent close/free, permission o‘zgarishi va platforma farqlarini qamraydi. Correctness avval etalon hamda invariant bilan tekshiriladi, keyin page fault, cache miss, contention, latency yoki xotira sarfi o‘lchanadi. Sanitizer, fault injection va malformed-input fuzzing topgan minimal holat doimiy regressiya testiga aylantiriladi.

Unixga o‘xshash tizimda kernel user processning page faultini hal qila olmasa odatda SIGSEGV yuboradi. Signal metadata’si manzil map qilinmaganini yoki permission buzilganini ajratishi mumkin. Handler ichida umumiy recovery xavfli: dastur invariantlari allaqachon buzilgan bo‘lishi ehtimol. Amaliy tahlil core dump, instruction pointer, registerlar, mapping ro‘yxati va stack trace’dan boshlanadi. Optimized buildda inline va tail-call sabab trace to‘liq ko‘rinmasligi mumkin; aynan binaryga mos debug symbol va build-id kerak. Minimal reproducer sanitizer bilan ishga tushirilsa asl noqonuniy access crash nuqtasidan oldinroq topilishi mumkin.

Bog‘liq tushunchalar

SIGSEGV, page fault, virtual memory, null pointer, core dump, memory protection