Имеется структура IMAGE_SECTION_HEADER STRUCT: Код (Text): IMAGE_SECTION_HEADER STRUCT Name1 db IMAGE_SIZEOF_SHORT_NAME dup(?) union Misc PhysicalAddress dd ? VirtualSize dd ? ends VirtualAddress dd ? SizeOfRawData dd ? PointerToRawData dd ? PointerToRelocations dd ? PointerToLinenumbers dd ? NumberOfRelocations dw ? NumberOfLinenumbers dw ? Characteristics dd ? IMAGE_SECTION_HEADER ENDS Указатель на нее хранится в esi (assume esi: ptr IMAGE_SECTION_HEADER). При обращении к полю VirtualAddress (invoke dw2hex, [esi].VirtualAddress, offset tmp) генерируется следующее: Код (Text): PUSH DWORD PTR DS:[ESI+C] Хотя смещение поля VirtualAddress относительно начала структуры - 10h. Подскажите, пожалуйста, в чем дело?
_Aspire Потомучто в wrk так определено, но хидер ведь там на си, а товарищ асм юзоет. Код (Text): // Section header format. // #define IMAGE_SIZEOF_SHORT_NAME 8 typedef struct _IMAGE_SECTION_HEADER { UCHAR Name[IMAGE_SIZEOF_SHORT_NAME]; union { ULONG PhysicalAddress; ULONG VirtualSize; } Misc; ULONG VirtualAddress; ULONG SizeOfRawData; ULONG PointerToRawData; ULONG PointerToRelocations; ULONG PointerToLinenumbers; USHORT NumberOfRelocations; USHORT NumberOfLinenumbers; ULONG Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; У меня в хидере определена так: Код (Text): ;Section header format. IMAGE_SIZEOF_SHORT_NAME equ 8 IMAGE_SECTION_HEADER STRUCT _Name UCHAR IMAGE_SIZEOF_SHORT_NAME dup(?) VirtualSize ULONG ? ;Для EXE-файлов содержит виртуальный размер секции. Т.е. это размер, выровненный на SectionAlignment VirtualAddress ULONG ? ;RVA секции SizeOfRawData ULONG ? ;Размеp секции, выpавненный согласно установкам в PE-заголовке(выровненный на ближайшую верхнюю границу размера файла) PointerToRawData ULONG ? ;Файловое смещение на начало секции PointerToRelocations ULONG ? ;Не используется в исполняемых файлах PointerToLineNumbers ULONG ? ;Файловое смещение таблицы номеров строк. В данный момент не используется в исполняемых файлах NumberOfRelocations USHORT ? ;Количество перемещений в таблице базовых поправок для данной секции. Т.к. значение указателя на таблицу базовых поправок храниться в массиве DataDirectory, то это поле тоже может быть любым NumberOfLineNumbers USHORT ? ;Количество номеров строк для данной секции. Т.к. поле PointerToLinenumbersне используется, то может принимать любые значения Characteristics ULONG ? ;Содеpжит флаги, такие как содеpжит ли эта секция исполняемый код, инициализиpованные данные, неинициализиpованные данные, можно читать и писать в секцию IMAGE_SECTION_HEADER ENDS PIMAGE_SECTION_HEADER typedef PTR IMAGE_SECTION_HEADER