Bosh sahifa Wiki Data section

Data section

Data sectionexecutable yoki object faylda dastur ishga tushishidan oldin qiymati ma’lum bo‘lgan global va static ma’lumotlar saqlanadigan qism. Native binary formatlarda u odatda initialized writable data’ni bildiradi; WebAssembly’da data segmentlar linear memory’ni boshlang‘ich baytlar bilan to‘ldiradi. Aniq nom va xulq ELF, PE, Mach-O yoki virtual mashina formatiga bog‘liq.

Native binary bo‘limlari

ELF’da .data non-zero boshlang‘ich qiymatli writable global o‘zgaruvchilarni saqlaydi. .rodata string literal va o‘zgarmas jadval kabi read-only qiymatlar uchun. .bss zero-initialized yoki boshlang‘ich qiymatsiz static data’ni ifodalaydi; faylda to‘liq nol baytlarini saqlamasdan faqat kerakli memory hajmini ko‘rsatishi mumkin.

Loader segmentlarni virtual memoryga map qilib, permission o‘rnatadi. Code sahifalari executable va read-only, writable data esa executable bo‘lmasligi tamoyili hujum yuzasini kamaytiradi. Section linker uchun mantiqiy birlik, segment esa loader map qiladigan birlik bo‘lishi mumkin; ular har doim birga teng emas.

Linker va relocation

Bir nechta object fayldagi data sectionlar linker tomonidan yakuniy image’da birlashtiriladi. Alignment har obyekt manzilining type talabiga mosligini ta’minlaydi. External symbol manzili link vaqtida yoki dynamic loader tomonidan relocation orqali to‘ldiriladi. Position-independent code global offset table kabi mexanizmlardan foydalanadi.

Custom linker script embedded tizimda data qaysi flash va RAM manziliga joylashishini belgilaydi. Initial qiymatlar flash’da turib, startup kodi ularni RAM’ga ko‘chirishi mumkin. BSS esa RAM’da nolga to‘ldiriladi. Noto‘g‘ri script overlap, alignment xatosi yoki memory regiondan oshishga olib keladi.

WebAssembly data segmentlari

WebAssembly module data segmenti baytlar ketma-ketligini belgilaydi. Active segment instantiation paytida linear memory’ning berilgan offsetiga ko‘chiriladi. Passive segment keyin memory.init orqali qo‘llanib, data.drop bilan tashlab yuborilishi mumkin. Bulk memory operatsiyalari runtime’da nazoratli initialization beradi.

Offset va segment uzunligi memory chegarasidan chiqsa instantiation yoki instruction trap beradi. Compiler string literal, constant table va runtime metadata’ni shu segmentlarda joylashtiradi. Data segment module fayli hajmiga kiradi; juda katta embedded asset alohida tarmoq resursi sifatida yuklansa cache va streaming yaxshiroq bo‘lishi mumkin.

Xavfsizlik jihatlari

Private key yoki parolni data sectionga yozish uni binary ichida saqlaydi. Obfuscation uni secret qilmaydi; strings, disassembler yoki memory dump bilan topish mumkin. Credential runtime secret store’dan olinadi. Public certificate yoki lookup table esa binary data sifatida qonuniy bo‘lishi mumkin.

Read-only ma’lumot writable sectionga tushsa tasodifiy o‘zgarishdan himoya yo‘qoladi. Compiler const va linker permissioni birgalikda ishlaydi. RELRO kabi himoya relocationdan keyin ayrim jadvalni read-only qiladi. W^X siyosati writable va executable permissionning bir vaqtda bo‘lishini cheklaydi.

Diagnostika

size, readelf, objdump yoki platformaga mos vosita section hajmi, flag va symbolni ko‘rsatadi. Binary keskin kattalashsa katta static array yoki tasodifan embedded fayl topilishi mumkin. Map file qaysi object va symbol qancha joy egallaganini ko‘rsatadi. Release stripping debug symbolni olib tashlashi mumkin, ammo data sectiondagi real constantlar qoladi.

Dynamic library bilan aloqasi

Shared library har processga code sahifalarini umumiy map qilishi, writable data uchun esa private nusxa berishi mumkin. Copy-on-write sahifa o‘zgarmaguncha fizik xotirani ulashadi. Thread-local storage har thread uchun alohida global qiymatlar yaratadi va oddiy .datadan boshqa loader mexanizmini talab qiladi.

Address Space Layout Randomization segment bazasini o‘zgartiradi. Absolute pointer saqlangan data relocation talab qiladi, position-independent representation esa nisbiy offsetdan foydalanadi. Signed yoki hashed binary’da post-build patch data yaxlitligini buzishi mumkin.

Bog‘liq tushunchalar

Executable file, Linker, BSS, Read-only data, WebAssembly, Linear memory, Relocation