Привет! У меня вопрос ко всем, кто разбирается в тонкостаях PE. В документации по PE говорится, что SizeOfRawData секции должно быть меньше, чем VirtualSize. Между тем мне не попадалось еще ни одного ЕХЕ, где бы это правило соблюдалось. Например, вот секции Calc.exe: Код (Text): Name VOffset VSize ROffset RSize Flags .text 00001000 [b]000126B0[/b] 00000400 [b]00012800[/b] 60000020 .data 00014000 0000101C 00012C00 00000A00 C0000040 .rsrc 00016000 [b]00008A70[/b] 00013600 [b]00008C00[/b] 40000040 Более того, я недавно писал вирус, который увеличивал последнюю секцию и выставлял новое значение VirtualSize "по правилам" - модифицированная прога отказывалась загружаться. Просветите, пожалуйста, лесного жителя, где же правда? Или где меня глючит?
а где это написано? и что же получится, если, у последней секции данные будут находиться в конце файла, а VSize будет больше RSize ? что будет грузиться в память ? за пределами RSize файл же кончится
"за пределами RSize файл же кончится" - а ФАСМ так неинициализированные данные определяет, чтобы новую секцию не писать. В память грузятся нули. Код (Text): .data x dd size_of_initialized_data ;-------- Size Of Raw Data y rd size_of_uninitialized_data ;------- Virtual Size
Funbit В книге Пирогова Assembler для Windows, еще где-то, не помню. Все, вопрос снимается, всем спасибо, я нашел удовлетворительный ответ в "Путеводителе по написанию вирусов под Win32: 3. Заголовок PE". Правда, он противоречит источникам, о которых я говорил выше: В EXE VirtualSize содержит реальный размер кода или данных. A SizeOfRawData округляется, потому и больше.