2. Описание полей структуры из статьи ФОРМАТ ИСПОЛНЯЕМЫХ ФАЙЛОВ PortableExecutables (PE) написанной Hard Wisdom
Немного исправил названия, согласно файлу Windows.pas
-=====T=======T=======================T=================================¬
¦ ¦ Size ¦ ¦ ¦
¦Base ¦ or ¦ Name Of field ¦ Brief description ¦
¦ ¦ Type ¦ ¦ ¦
¦=====+=======+=======================+=================================¦
¦ 00h ¦ 08h ¦ Name ¦ Имя объекта, остаток заполнен ¦
¦ ¦ ¦ ¦ нулями, если имя объекта имеет ¦
¦ ¦ ¦ ¦ длину 8 символов, то заключи- ¦
¦ ¦ ¦ ¦ тельного 0 нет. Некоторые PE ¦
¦ ¦ ¦ ¦ дамперы падают на этом факте. ¦
¦ ¦ ¦ ¦ Имя - штука отфонарная и никого ¦
¦ ¦ ¦ ¦ ни к чему не обязывает. ¦
+-----+-------+-----------------------+---------------------------------+
¦ 08h ¦ DWord ¦ ¦ Виртуальный размер секции, ¦
¦ ¦ ¦ Misc.VirtualSize ¦ именно столько памяти будет от- ¦
¦ ¦ ¦ ¦ ведено под секцию. Если Virtual ¦
¦ ¦ ¦ ¦ Size превышает SizeOfRawData, ¦
¦ ¦ ¦ ¦ то разница заполняется нулями, ¦
¦ ¦ ¦ ¦ так определяются секции неини- ¦
¦ ¦ ¦ ¦ циализированных данных ( ¦
¦ ¦ ¦ ¦ SizeOfRawData = 0) ¦
+-----+-------+-----------------------+ - - - - - - - - - - - - - - - - +
¦ 0Ch ¦ DWord ¦ VirtualAddress ¦ Размещение секции в памяти, ¦
¦ ¦ ¦ ¦ виртуальный ее адрес относитель-¦
¦ ¦ ¦ ¦ но Image Base. Позиция каждой ¦
¦ ¦ ¦ ¦ секции выравнена на границу ¦
¦ ¦ ¦ ¦ SectionAlignment(степень2 от 512¦
¦ ¦ ¦ ¦ до 256М включительно, по умол- ¦
¦ ¦ ¦ ¦ чанию 64К) и секции упакованы ¦
¦ ¦ ¦ ¦ впритык друг к другу, впрочем, ¦
¦ ¦ ¦ ¦ можно это не соблюдать. ¦
+-----+-------+-----------------------+---------------------------------+
¦ 10h ¦ DWord ¦ SizeOfRawData ¦ Размер секции (ее инициализиро- ¦
¦ ¦ ¦ ¦ ванной части) в файле, кратно ¦
¦ ¦ ¦ ¦ полю FileAlignment в заголовкеPE¦
¦ ¦ ¦ ¦ Header, обычно он меньше или ¦
¦ ¦ ¦ ¦ равен VirtualSize. Играя с ¦
¦ ¦ ¦ ¦ этим полем можно добиться неко- ¦
¦ ¦ ¦ ¦ торых результатов ;-) загрузчик ¦
¦ ¦ ¦ ¦ по идее хлопает всю секцию в ¦
¦ ¦ ¦ ¦ отведенное ОЗУ! SizeOfRawData ¦
¦ ¦ ¦ ¦ может быть больше, чем Virtual ¦
¦ ¦ ¦ ¦ Size. Это происходит, когда ¦
¦ ¦ ¦ ¦ "умный" линкер заявляет строгий ¦
¦ ¦ ¦ ¦ размер секции (не кратный ¦
¦ ¦ ¦ ¦ SectionAlignment).В таком случае¦
¦ ¦ ¦ ¦ хвост секции теоретически не ¦
¦ ¦ ¦ ¦ используется. ¦
+-----+-------+-----------------------+ - - - - - - - - - - - - - - - - +
¦ 14h ¦ DWord ¦ PointerToRawData ¦ Физическое смещение относитель- ¦
¦ ¦ ¦ ¦ но начала EXE файла, выровнено ¦
¦ ¦ ¦ ¦ на границу FileAlignment поля за¦
¦ ¦ ¦ ¦ головка PE Header. Смещение ¦
¦ ¦ ¦ ¦ используется загрузчиком как ¦
¦ ¦ ¦ ¦ seek значение. ¦
+-----+-------+-----------------------+---------------------------------+
¦ 18h ¦ 0Ch ¦ PointerToRelocations ¦ зарезервировано для OBJ файла, ¦
¦ ¦ ¦ PointerToLinenumbers ¦ в экзешниках смысла не имеет ¦
¦ ¦ ¦ NumberOfRelocations ¦ ¦
¦ ¦ ¦ NumberOfLinenumbers ¦ ¦
¦ ¦ ¦ ¦ ¦
+-----+-------+-----------------------+---------------------------------+
¦ 24h ¦ DWord ¦ Characteristics ¦ битовые флаги секции, см.ниже ¦
¦=====¦=======¦=======================+=================================¦
¦ Total Structure size 28h ¦ Общий размер описателя секции ¦
L=====================================¦=================================-