Pe формат
Що значить PE файл?
PE - це скорочення від Portable Executable, тобто стерпний (універсальний) виконуваний файл =) Цей формат з'явився ще в пізні часи Windows 3.11, але даний поширення отримав з розквітом Windows 95. Можна сказати, що зараз на комп'ютерах з Windows 9x / 2K / XP / Vista / 7 знаходиться 95% виконуваних ( exe, dll, драйвери (sys)) файлів - це PE файли.
Чи не могли б ви коротко, по-мінімуму, описати формат PE файлу?
PE файл має свою структуру. Дуже коротко я її постараюся описати. Спочатку файлу йде DOS заголовок, який включає в себе DOS MZ-заголовок і DOS-stub. DOS-stub, фактично, є повноцінним exe, якому запускається операційної системою, яка не знає про PE-фоpмате. Зазвичай в цьому випадку він просто отобpажает стpоку вpоде "This program can not be run in DOS mode" або типу того =) Якщо ж ОС - Windows, то DOS-stub не виконується. Далі йде PE-заголовок (насправді між DOS заголовком і PE заголовком є ще дещо що, але я це описувати не буду, тому що для початкового розуміння формату PE це не потрібно). PE заголовок починається з 4-х байтной сигнатури. яка вдає із себе 2 байта - "PE" (4550h) і 2 байта рівні 0. Далі йдуть різні дані, які я описувати не буду. Їх дуже багато і детально ви можете подивитися в стандартні описі формату PE файлів. Після PE заголовка йде таблиця секцій файлу (Object Table), яка описує параметри секцій файлу (секції коду, даних, ресурсів і т.д.), тобто ім'я секції, її Virtual Size, RVA. розмір секції в файлі, зміщення секції в файлі, характеристику секції. Кількість таких структур в таблиці секцій дорівнює кількості секцій. Кількість секцій зберігається в PE заголовку. Після таблиці секцій, йдуть сторінки образів секцій, тобто, просто кажучи, самі секції одна за одною.
А що таке секція EXE файлу?
Що таке TLS?
TLS (Thread Local Storage, Локальна пам'ять потоку) - Це 24-х (18h) байтная структура, причому 8 останніх байт забито нулями, але це не принципово. Рідне місце цієї структури в секції .rdata (по крайней мере, для програм, написаних на Delphi). Thread Local Storage використовується для виділення областей пам'яті, використовуваних потоками (threads) для зберігання даних. Цікавою особливістю TLS є можливість виконання програми до точки входу
Що означають всі ці терміни, які ми бачимо при показі секцій файлу програмами типу ProcDump. LordPE (на прикладі ProcDump): Name, Virtual Size, Virtual Offset, Raw Size, Raw Offset, Characteristics?
Name в даному випадку - це ім'я секції. Воно може бути будь-яким (максимальна довжина - 8 символів), і його зміна в загальному випадку не вплине на працездатність програми. За винятком секції імені секції ресурсів .rsrc Virtual Size - це розмір даної секції в пам'яті. Virtual Offset - це зміщення даної секції в пам'яті щодо Image Base, іншими словами - це RVA цієї секції. Raw Size - це розмір даної секції в файлі на диску. Raw Offset - це зміщення даної секції в файлі на диску щодо початку файлу. Characteristics - це 4х байтное число, що визначає характеристику секції, її властивості. Це число показує чи є секція секцією виконуваного коду чи ні, чи можливо читання даних з цієї секції, запис даних в цю секцію і т.д.