String Table — object, executable yoki debug format ichida symbol nomlari, section nomlari va boshqa takrorlanuvchi matnlarni markazlashtirib saqlaydigan baytlar jadvali. Boshqa yozuvlar stringni nusxalash o‘rniga offset orqali ko‘rsatadi.
Offset modeli
Ko‘p formatda satrlar null bilan tugaydi va table boshidagi nol offset bo‘sh satrni anglatadi. Symbol entry name maydonida table ichidagi offsetni saqlaydi. Section nomlari alohida string table’da, dynamic symbol nomlari boshqa table’da bo‘lishi mumkin.
Siqish
Bir xil stringni deduplicate qilish fayl hajmini kamaytiradi. Suffix mergingda foobar va bar uchun ikkinchi nom birinchi satr ichidagi suffix offsetini ishlatishi mumkin. Bu faqat format offsetga ruxsat etsa qonuniy.
Nomlar kodlanishi
Table byte encoding format tomonidan belgilanadi; symbol nomlari ko‘pincha raw byte sifatida ko‘riladi. Demangler mangled nomni inson o‘qiydigan ko‘rinishga aylantiradi, lekin table original binary nomni saqlaydi.
Xavfsiz o‘qish
Parser offset table hajmidan tashqariga chiqmasligi va yakunlovchi null borligini tekshirishi kerak. Malformed executable’dagi katta yoki circular ko‘rsatkich tushunchasi string table uchun yaroqsiz; har reference bounded slice sifatida o‘qiladi.
Strip jarayoni
Strip operation foydalanilmaydigan full symbol va debug stringlarni olib tashlashi mumkin, dynamic loaderga kerak nomlar esa qoladi. Build reproducibility uchun symbol va section ordering deterministik bo‘ladi.
Tekshiruv
Tekshiruv har reference offsetdan valid UTF-8 talab qilmasdan xavfsiz satr olinishini, table boundary va terminatorni nazorat qiladi. Fuzzing bo‘sh, duplicate va maksimal uzun nomlarni qamraydi.
String table hajmi juda o‘sganda symbol yoki template nomlari sababini topish uchun prefix statistikasi ishlatiladi. Bu diagnostika original nomlarni ommaviy logga chiqarishdan oldin maxfiylik siyosatini hisobga oladi.
+## Amaliy boshqaruv
String Table implementatsiyasida byte offset, terminator va deduplication alohida ma’lumot modeli sifatida yuritiladi. symbol, section va dynamic nom table’lari kabi parametrlar global taxmin sifatida yashirilmaydi, balki artefakt versiyasi va target bilan bog‘lanadi. Shu sabab incremental build yoki runtime qayta yuklashda eskirgan natija ishlatilmaydi. Har bir qaror uchun manba, qo‘llangan qoida va hosil bo‘lgan natija debug rejimida qayta ko‘rish mumkin bo‘lgan shaklda saqlanadi.
Muhim xato sinfi — table chegarasidan tashqari offset yoki terminatorsiz satr. 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 bounded parser va malformed binary fuzzing 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.
Bog‘liq tushunchalar
symbol table, section name, object file, binary format, name mangling, debug information