manba

PE fayl formati

PE fayl formati

Windows operatsion tizimlarida bajariluvchi fayllar .exe kengaytmasiga egaligini bilamiz. Shuningdek, kutubxonalar (.dll), qurilma drayverlari (.sys) fayllari va boshqa bajariluvchi fayllar ham o'z kengaytmasiga ega. Bularning umumlashtiruvchi jihat - ushbu fayllarning barchasi NT tizimlari uchun umumiy bo'lgan PE formatidan tashkil topgan. PE - Portable Executable so'zining qisqartmasi bo'lib, kelib chiqishi Unix Coff (common object file format) ga borib taqaladi. Barcha Win32 platformalaridagi PE-yuklagich ushbu formatni tushunadi va bu ushbu tizimlarning nativ fayl formatidir. Demak, ushbu formatni yaxshi bilish Windows ning ichki tuzilmalarini tushunishda katta ahamiyatga egadir.

"Sodda qilib aytganda, Windows tizimlaridagi dasturlar, aniqrog'i, u haqidagi ma'lumotlar, bajariluvchi qismlari (kod), resurslari, dastur foydalanadigan run-time yoki tashqi kutubxonalar haqidagi ma'lumotlar barchasi ushbu fayl formati shaklida tuzilmaviy ko'rinishda saqlanadi. OT (operatsion tizim)da shunday faylni ishga tushirganingizda PE-yuklagich (fayllarni xotiraga yuklab, so'ng ishga tushiruvchi OT ning maxsus qismi) fayl ichidan kerakli ma'lumotlarni o'qib, uni to'g'riligini tekshiradi, kerakli qismlarni xotiraga yuklaydi va ishga tushiradi."

Keling, PE formatning umumiy tuzilmasini ko'rib chiqamiz.

Yuqoridagi rasmda ko'rinib turganidek, har qanday PE fayl DOS MZ sarlavhasi (sarlavha - header) bilan boshlanishi shart. Hatto Win32 kutubxonalar (.dll) ham. Hozir ushbu sarlavha bizga uncha qiziqmas. Bu sarlavha mabodo dastur DOS tizimida ishga tushirilganda, DOS uni to'g'ri bajariluvchi fayl deb hisoblab, ushbu sarlavhadan keyin keladigan DOS stub dagi kodni ishga tushirishi uchun kerak. DOS stub - DOS tushunadigan oddiy bajariluvchi fayl formatidagi kichik dasturdir.

"Fayl kengaytmasi .exe bo'lsa u albatta PE formatda degani emas. DOS dagi bajariluvchi fayl formati biroz boshqacha shaklda bo'ladi va undagi fayllar nomidagi kengaytmasi ham .exe shaklida bo'ladi.

PE formatdagi faylni DOS da ishga tushirilganda, DOS yuklagichi PE format boshidagi DOS MZ sarlavhasidan keyin keladigan DOS stub dasturini ishga tushiradi. Odatda bu dastur ekranga - "This program cannot run in DOS mode" ("Ushbu dasturni DOS rejimida ishga tushirish mumkin emas") yozuvini chiqarish vazifasini bajaradi xolos. Va bu ko'pincha kompilyatorlar tomonidan avtomatik qo'shib qo'yiladi. Lekin bu dasturchi DOS stub ga o'ziga kerakli dasturni yoza olmaydi degani emas. Ya'ni, bu yerga o'zingizga kerakli narsani yozishingiz mumkin. Faqat bu qism fayl DOS da ishga tushirilgandagina ishga tushadi."

DOS stub sarlavhasidan keyin PE sarlavhasi keladi. Ushbu sarlavha IMAGE_NT_HEADERS tuzilmasining umumiy nomlanishi bo'lib, PE yuklagichga kerak bo'ladigan muhim ma'lumotlar shu yerda joylashgan bo'ladi. DOS MZ sarlavhasida shu PE sarlavhasi faylning qaysi qismidan boshlab joylashganligi haqida ma'lumot (file offset) bo'lganligidan, PE yuklagich DOS Stub ni tashlab o'tib, biryo'la shu sarlavhaga sakrab o'tishi mumkin.

PE faylning haqiqiy tarkibi Seksiyalar (sections) deb nomlanga bloklarga bo'lingan holatda saqlanadi. Seksiya bu - umumiy attributga ega ma'lumotlar to'plamidir. Agar PE faylni mantiqiy disk deb olsak, PE sarlavha - boot sektor, seksiyalar esa diskdagi fayllardir deb tasavvur qilishimiz mumkin. Har bir fayllar "faqat o'qish uchun", "tizimli", "yashirin", "arxiv" attributiga ega bo'lganidek, seksiyalar ham shu kabi attributlarga ko'ra ajratiladi, ma'lumotlarning mantiqiy shakli ahamiyatga emas.

"Ya'ni, seksiyalar kodlar seksiyasi, ma'lumotlar seksiya deb saqlanuvchi ma'lumot turiga qarab ajratilmaydi. Aksincha bitta seksiyada ham kod, ham ma'lumotlar bo'lishi mumkin. Lekin faqat o'qiladigan (read-only) blokka, faqat o'qish uchun kerak bo'ladigan (yozishga emas) ma'lumotlar yoziladi. Seksiyalar huddi shunday attributlarga ko'ra ajratiladi."

PE yuklagich seksiyalarni operativ xotiraga yoyganda seksiya attributiga qarab u yuklangan xotira qismiga ham unga mos attributni beradi.

Endi yuqorida aytganimizdek PE faylni mantiqiy disk deb, PE sarlavhani diskning boot sektori, seksiyalarni fayl deb tasavvur qilsak, bizga fayllarni diskning qayerida joylashganligi haqidagi ma'lumotlar yetishmayapti. PE sarlavhadan keyin keladigan Seksiyalar jadvali aynan shunday ma'lumotlarni beradigan tuzilmalar massividan tashkil topgan. Massivning har bir elementi qaysidir bitta seksiya haqidagi ma'lumotlardan iborat. Bunda seksiyaning attributi (yuqorida aytilganidek), uning faylning qaysi qismidan boshlab joylashganligi, virtual offset kabi ma'lumotlar saqlanadi. Agar PE faylda 5 ta seksiya bo'lsa, ushbu seksiyalar jadvalida ham shu seksiyalarga mos keluvchi 5 ta tuzilmaviy yozuv bor bo'ladi.

"Seksiyalar jadvalidan keyin yuqorida gaplashganimiz seksiyalarning tarkiblari joylashadi"

Hozircha PE fayl formatining umumiy ko'rinishi haqidagi ma'lumotlar shular. Qo'shimchasiga yuqoridagi aytilganlarni birlashtirib PE faylning xotiraga qay tartibda yuklanishining umumiy ko'rinishini quyida keltirib o'taman:

PE fayl ishga tushirilsa PE yuklagich DOS MZ sarlavhasidan PE sarlavhani faylning qayeridan boshlanganini o'qiydi va PE sarlavhaga o'tadi.

Yuklagich PE sarlavha ichidagi ma'lumotlarga qarab uning "haqiqiy va to'g'ri PE fayl" ekangligini tekshiradi va PE sarlavha oxiriga o'tadi.

PE sarlavhadan keyingi seksiyalar jadvalidan kerakli ma'lumotlar olinib, har bir seksiyani xotiraga biriktiradi (file mapping orqali) va xotira bloklariga seksiyaga mos attributlarni beradi (attributlar seksiyalar jadvalida berilgan).

PE fayl xotiraga biriktirilgandan so'ng, PE yuklagich importlar jadvali kabi PE faylning mantiqiy qismlarini qarab, kerakli amallarni bajaradi.

Import jadvali boshqalar haqida keyinroq gaplashamiz.

Manba:


JONNY - Texnoman foydalanuvchisi

Muallif haqida

JONNY Arduino, Java, C#, Android, Windows, Linux, Debian, Javascript. O'zbekistonni rivojlantiramiz! Dasturlash orqali vatanimizni yangi marralarga olib chiqamiz.


Qiziq bo‘ladi:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!