Форматът Windows Portable Executable има свои собствени малки нюанси, така че ето кратко ръководство за това как работят.
Windows Portable Executable (PE) е основният файлов формат на Windows за изпълними файлове и други типове двоични файлове. Файловият формат PE е проектиран да бъде независим от платформата, така че може да се използва на всяка машина с Windows работещ със същата версия на операционната система и процесорна архитектура, за които беше файлът компилиран.
И така, нека анализираме файловия формат на Windows PE и да научим за неговата структура и съставни компоненти.
Какво представлява Windows Portable изпълним файл?
Преди да проучите формата на Windows Portable Executable, е важно да изясните основите. Нека да направим крачка назад и да научим за основната концепция на Windows PE—COFF.
Когато компилирате изходния код в програма, компилаторът генерира обектен файл (.obj). Този обектен файл съдържа инструкции за компютъра в двоичен формат.
COFF или Common Object File Format е стандартизиран набор от конвенции за представяне на двоични инструкции. COFF помага за поддържане на междуплатформена съвместимост, тъй като всички COFF файлови формати следват същия набор от правила и конвенции за организиране на код и данни. Въпреки че COFF първоначално е разработен за използване на *NIX системи, сега той е повсеместен във всички платформи.
Файловият формат Windows Portable Executable (PE) е модификация на COFF и е разработен, за да се използва изключително на 32-битови и 64-битови Windows системи. За разлика от COFF, който предоставя стандартизиран формат за обектни файлове, Windows PE предоставя стандартизиран формат за изпълними и библиотечни файлове.
Той съдържа секции и заглавки, които предоставят информация за въпросния изпълним файл и помагат на системното зареждане да управлява данни, свързани с изпълнимия файл. Заглавките в PE файл помагат на системното зареждане да картографира файла в паметта, да разреши зависимости като експорт/импорт на API, да управлява ресурси и да подготви файла за изпълнение.
Linux също има своя собствена итерация на COFF; нарича се Executable Link File или накратко ELF binary. Можете да проверите дали даден файл е ELF или не, като стартирате файлова команда на Linux с името на файла като първи аргумент.
Структурата на Windows Portable изпълним файл
Преносимият изпълним файлов формат се състои от няколко компонента, всеки със специфична цел. Тези компоненти включват:
- Заглавки на секции, които описват оформлението и характеристиките на всяка секция на файла Самите секции, които съдържат изпълним код, данни и ресурси.
- PE заглавката, която предоставя информация за цялостната структура и изисквания на файла.
- DOS заглавката, която включва малка програма, която се изпълнява, когато файлът се изпълни на DOS система.
- И накрая, заглавките на PE разделите, които описват местоположението и атрибутите на всеки раздел във файла.
Като цяло тези компоненти работят заедно, за да създадат структуриран формат, който позволява на операционната система правилно да зарежда, изпълнява и управлява изпълнимия код, съдържащ се във файла. Нека научим точно какво прави всеки компонент.
DOS Header
Първата част на PE файл се нарича DOS Header. Малко количество изпълним код се съхранява в DOS хедъра, който може да се изпълнява и на DOS машина.
Този код се нарича още MS-DOS мъниче и се използва за извеждане на съобщение за грешка на системи, които не поддържат PE файла.
PE заглавка
Заглавието Portable Executable дава информация за изпълнимия файл, като например колко голям е файлът, къде се намират различните части и от какви ресурси се нуждае изпълнимият файл. PE хедърът също има информация за типа на изпълнимия файл, независимо дали е a Windows .DLL файл или .EXE.
Заглавки на раздели
Секциите са внедрени, за да организират многото компоненти на изпълним файл, като код, данни и ресурси като текстови низове, изображения и др. Заглавките на разделите включват информация относно размера и местоположението на всеки раздел, както и всички свързани флагове.
Флаговете, свързани с всеки хедър на раздел, могат да показват различни атрибути на раздела, като например дали е изпълним, записваем или четим. Тези флагове помагат на операционната система правилно да зарежда и управлява съдържанието на всеки раздел по време на изпълнение на програмата.
Раздели
Самите секции съдържат реалния код, данни и ресурси на изпълнимия файл. Всеки сегмент е подравнен към определена граница на паметта и има свой собствен набор от атрибути, които влияят на това как операционната система го обработва.
Вече знаете всичко за преносимия изпълним файлов формат на Windows
Windows Portable Executable е стабилен и многофункционален файлов формат, използван за създаване на голямо разнообразие от Windows приложения и системни компоненти. Като разбират структурата на файловия формат PE, разработчиците могат да създават ефективни приложения, които се възползват от отличителните характеристики на Windows.
Освен придобиването на задълбочено разбиране на платформата, на която ще работи вашето приложение, като следвате няколко стандартни добри практики за кодиране, ще можете да увеличите максимално качеството на приложението, независимо от платформата, на която се изпълнява На.