Bosh sahifa Wiki Dynamic Linker

Dynamic Linker

Dynamic Linkerexecutable ishga tushganda yoki ishlash davomida kerakli shared librarylarni yuklab, dynamic symbol va relocationlarni bog‘laydigan tizim komponenti. U executable ichiga kutubxona kodini to‘liq nusxalamasdan umumiy foydalanish imkonini beradi.

Yuklash jarayoni

Loader executable dependency ro‘yxatini o‘qiydi, library search path bo‘yicha fayllarni topadi va virtual xotiraga map qiladi. Har obyektning dependencylari recursively yuklanadi. SONAME va version policy qaysi binary-compatible library tanlanishini boshqaradi.

Runtime relocation

Relocation global variable, function pointer va address-sensitive instructionlarni runtime manzilga moslaydi. Position-independent code nisbiy addressing va Global Offset Table ishlatadi. Procedure Linkage Table lazy binding bilan function symbolni birinchi chaqiruvda resolve qilishi mumkin.

Symbol qidiruvi

Symbol interposition bir shared objectdagi reference’ni boshqa object exported symboli bilan qoplashi mumkin. Lookup order platformaga bog‘liq. Hidden visibility va direct binding performance hamda predictabilityni yaxshilaydi, lekin interposition imkonini cheklaydi.

Pluginlar

dlopen yoki unga o‘xshash API pluginni runtime yuklaydi; dlsym symbol manzilini oladi. Handle lifecycle, thread safety va library ichidagi obyektlar tirik paytda unload qilmaslik zarur. Constructor va destructorlar yuklash/bo‘shatish tartibida ishlaydi.

Xavfsiz qidiruv

Security uchun search pathga yoziladigan ishonchsiz katalog qo‘shilmaydi. RPATH/RUNPATH, environment override, code signing va safe search mode tekshiriladi. Library hijacking noto‘g‘ri nomli faylning ustun topilishidan keladi.

Tashxis

Diagnostikada loader trace, dependency ro‘yxati, symbol version va relocation xatosi ko‘riladi. “Symbol topilmadi” holatida fayl mavjudligi yetarli emas; kerakli export, arxitektura va version aynan mos bo‘lishi kerak.

Loader diagnostikasi ishlab chiqarish muhitida maxfiy path va environment qiymatlarini to‘liq chiqarmaydi. Audit uchun library identity, build-id, resolved symbol version va search manbasi yetarli shaklda qayd etiladi.

+## Amaliy boshqaruv

Dynamic Linker xavfsizligi faqat happy-path bilan baholanmaydi. GOT, PLT, TLS hamda initializerlar atrofidagi limitlar, noto‘g‘ri format va parallel bajarilish holatlari oldindan sinovga kiritiladi. Parser yoki runtime katta qiymatlarda integer overflow, cheksiz recursion va xotira o‘sishidan himoyalanadi. Ishonchsiz kirish diagnostic matn orqali terminal escape yoki maxfiy pathni chiqarib yubormasligi ham nazorat qilinadi.

Muhim xato sinfi — ishonchsiz search path yoki noto‘g‘ri symbol version. Bunday holatda vosita optimistik taxmin bilan davom etmaydi: zarur bo‘lsa sekinroq, lekin xavfsiz yo‘l tanlanadi yoki aniq diagnostika bilan jarayon to‘xtatiladi. Xatoni qayta ishlab bo‘ladigan qilish uchun target, optionlar, kirish identifikatori va tegishli metadata qayd etiladi. Foydalanuvchi ma’lumoti xom shaklda loglanmaydi; hash, build-id yoki cheklangan kontekst yetarli bo‘lgan joyda shular ishlatiladi.

Sifat nazorati loader trace, module build-id va startup testi orqali bajariladi. Testlar normal misol bilan cheklanmay, bo‘sh kirish, minimal va maksimal o‘lcham, mos kelmaydigan versiya, yo‘qolgan komponent hamda parallel holatlarni qamraydi. Natijaning to‘g‘riligi performance o‘lchovidan alohida baholanadi. Keyin vaqt, xotira, artefakt hajmi yoki runtime kechikishi kabi mavzuga mos metrikalar baseline bilan solishtiriladi. Regressiya topilsa, minimal takrorlanuvchi holat saqlanib, keyingi release uchun doimiy testga aylantiriladi.

Dynamic-link test muhiti bir xil nomli librarylarni turli kataloglarga joylab, search order va privileged mode siyosatini tekshiradi. Lazy hamda immediate binding alohida ishga tushirilib, initializer tartibi, TLS va birinchi chaqiruvdagi symbol resolution natijasi solishtiriladi.

Bog‘liq tushunchalar

shared library, loader, dynamic symbol, relocation, PLT, GOT