|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Формат исполняемых PE-файлов
|
Base | Size or Type | Name Of field | Brief description |
00h | DWord | Signature Bytes | Сигнатурка того, что этот файл собственно говоря является PE - должна быть 4550h, иначе - 'PE',0h,0h; два последних байта под что-то-там Микрософт зарезервировала (и проверяет их равенству на 0!). |
04h | Word | CPU Type | это поле указывает на предпочтительный ;-) тип процессора, на котором желательно запускать данную программу, вы редко увидите что-либо отличное от 14Ch -> i386 |
06h | Word | Num of Objects | это поле указывает на число реальных входов в Object Table |
08h | DWord | Time/Date Stamp | используется для хранения даты и времени создания/модификации линкером |
0Ch | DWord | Pointer to COFF table | дополнительный указатель определяющий местонахождение отладочной COFF таблицы в файлах, отладочную информацию лучше всего искать по другому |
10h | DWord | COFF table size | кол-во символов в COFF таблице |
14h | Word | NT Header Size | размер заголовка PE файла начиная с поля Magic, название взято у программы Hiew, таким образом, общий размер заголовка PE файла составляет NT Header Size + 18h |
16h | Word | Flags | указывает на предназначение программы, конкретное значение флагов см.ниже |
18h | Word | Magic | поле указывает на основное предназначение программы. абсолютно всем наплевать в него |
1Ah | Byte | Link Major | старший номер версии использовавшегося при создании линкера |
1Bh | Byte | Link Minor | младший номер версии использовавшегося при создании линкера (эти 2 поля загрузчик пока игнорирует) |
1Ch | DWord | Size of Code | размер именно программного кода в файле, KERNEL использует это значение для фактического отведения памяти под загружаемую программу, установка этого значения слишком маленьким приведет к выдаче идиотского сообщения о нехватке памяти, хотя ее может быть валом |
20h | DWord | Size of Init Data | размер секции инициализированных данных, очевидно не используется в Windows'95, но используется в NT, назначение аналогично приведенному выше |
24h | DWord | Size of UnInit Data | размер секции неинициализированных данных, сложно сказать, как эти 3 поля корреспондируют между собой, но лучше с ними по честному ;-) явно видно, что формат разрабатывали одни, а реализовывали его другие. Рекомендую изучить регионы памяти и VirtualXXX функции |
28h | DWord | Entry point RVA | адрес, относительно Image Base по которому передается управление при запуске программы или адрес инициализации/завершения библиотеки |
2Ch | DWord | Base of Code | RVA секции, которая содержит программный код (как будто бы она одна единственная ;-) ) судя по всему никем не используется (но установлено верно) |
30h | DWord | Base of Data | RVA секции содержащей якобы данные, в реальных экзешниках указывает и на .data и на .bss и еще бог знает куда, вряд ли кем-нибудь используется |
34h | DWord | Image Base | виртуальный начальный адрес загрузки программы (ее первого байта). Должен быть на границе 64 Кб (связано с системой памяти Windows'95) |
38h | DWord | Object align | выравнивание программных секций, должен быть степенью 2 между 512 и 256М включительно, так же связано с системой памяти. При использовании других значений программа не загрузится. |
3Ch | DWord | File align | фактор используемый для выравнивания секций в программном файле. В байтовом значении указывает на границу на которую секции дополняются 0 при размещении в файле. Большое значение приводит к нерациональному использованию дискового пространства, маленькое увеличивает компактность, но и снижает скорость загрузки. Должен быть степенью 2 в диапазоне от 512 до 64К включительно. Прочие значения вызовут ошибку загрузки файла. Я так думаю, что размер файла штука более важная. |
40h | Word | OS Major | старший номер версии операционки необходимый для запуска программы. (нулевое значение не позволяет запустить программу, остальные игнорируются проверялось на OSR2) |
42h | Word | OS Minor | младший номер версии операц. |
44h | Word | USER Major | пользовательский номер версии, задается пользователем при линковке программы и им же и используется |
46h | Word | USER Minor | аналогично, младший номер |
48h | Word | SubSys Major | старший номер версии подсистемы, черт его знает как он использается, по моему всяких версий уже через край |
4Ah | Word | SubSys Minor | аналогично, младший номер |
4Ch | DWord | Reserved | судя по всему так оно и есть |
50h | DWord | Image Size | виртуальный размер в байтах всего загружаемого образа, вместе с заголовками, кратен Object align |
54h | DWord | Header Size | общий размер всех заголовков: DOS Stub + PE Header + Object Table |
58h | DWord | File CheckSum | контрольная сумма всего файла, опять же как и в DOS'е ее никто не контролирует, а линкер ее ставит в 0 при линковке Предполагалось ее рассчитывать как инверсию суммы всех байтов файла. |
5Ch | Word | SubSystem | операционная подсистема необходимая для запуска данного файла (GUI, консоль...) |
5Eh | Word | DLL Flags | указывает на специальные потребности при загрузке, начиная с NT 3.5 устарел и не используется |
60h | DWord | Stack Reserve Size | память требуемая для стека приложения, память резервируется, но выделяется только Stack Commit Size байтов, следующая страница является охранной. Когда приложение достигает этой страницы, то страница становится доступной, а следующая страница - охранной, и так до достижения нижней границы, после чего Windows'95 убивает программу с воплями об исключении у нее в стеке |
64h | DWord | Stack Commit Size | объем памяти отводимой в стеке немедленно после загрузки |
68h | DWord | Heap Reserve Size | максимальный возможный размер локального хипа |
6Ch | DWord | Heap Comit Size | отводимый при загрузке хип |
70h | DWord | Loader Flags | ? начиная с NT 3.5 объявлено неиспользуемым, назначение неясно, но в целом связано с поддержкой отладки |
74h | DWord | Num of RVA and Sizes | указывает размер массива VA/Size который следует ниже, данная фича зарезервирована под будущие расширения формата. В данный момент его значение всегда равно 10h |
78h | DWord | Export Table RVA | RVA адрес таблицы экспорта |
7Ch | DWord | Export Data Size | размер таблицы экспорта |
80h | DWord | Import Table RVA | RVA адрес таблицы импорта |
84h | DWord | Import Data Size | размер таблицы импорта |
88h | DWord | Resource Table RVA | RVA адрес таблицы ресурсов |
8Ch | DWord | Resource Data Size | размер таблицы ресурсов |
90h | DWord | Exception Table RVA | RVA адрес таблицы исключений |
94h | DWord | Exception Data Size | размер таблицы исключений |
98h | DWord | Security Table RVA | ? адрес таблицы безопасности |
9Ch | DWord | Security Data Size | ? размер таблицы безопасности |
A0h | DWord | Fix Up's Table RVA | RVA адрес таблицы настроек |
A4h | DWord | Fix Up's Data Size | размер таблицы настроек |
A8h | DWord | Debug Table RVA | RVA адрес таблицы отладочной инфы |
ACh | DWord | Debug Data Size | размер таблицы отладочной инфы |
B0h | DWord | Image Description RVA | RVA адрес строки описани модуля |
B4h | DWord | Description Data Size | размер строки описания модуля |
B8h | DWord | Machine Specific RVA | ? адрес таблицы значений специфичных для микропроцессора |
BCh | DWord | Machnine Data Size | ? размер таблицы значений специфичных для микропроцессора |
C0h | DWord | TLS RVA | указатель на локальную область данных цепочек |
C4h | DWord | TLS Data Size | размер области данных цепочек |
C8h | DWord | Load Config RVA | ? |
CCh | DWord | Load Config Data Size | ? |
D0h | 08h | Reserved | ? |
D8h | DWord | IAT RVA | ? мною это поле обнаружено только в мультимедийных файлах системы Windows'95, это SNDREC32, CDPLAYER, MPLAYER. оно указывает на таблицу адресов импорта в файле (помимо структуры импорта) писал эти программы один человек и чего он хотел... используется в NT, в Windows'95 судя по всему нет |
DCh | DWord | IAT Data Size | ? размер описанного поля |
E0h | 08h | Reserved | ? |
E8h | 08h | Reserved | ? |
F0h | 08h | Reserved | ? |
Total Structure size | F8h | Общий размер заголовка |
Все прочие биты зарезервированы и желательно их установить в 0 значение, но можно этого и не делать ;-)
Опрос |
|
Конкурсы
|
|
Реклама |
|
Web дизайн: Бурлаков Михаил
Web программирование: Бурлаков Михаил