Подскажите, как будет выглядеть на fasme структура вида typedef union union { struct { DWORD LowPart; LONG HighPart; }; LONGLONG QuadPart; } LARGE_INTEGER, *PLARGE_INTEGER; каким образом вообще потом можно работать с QuadPart? там же 8 байт!
каким образом вообще потом можно работать с QuadPart? там же 8 байт! При помощи 64-битных регистров А если их нету - на то и есть HighPart - старшая часть и LowPart - младшая.
Код (Text): struc LARGE_INTEGER { label .QuadPart qword .LowPart dd ? .HighPart dd ? } > Для этих целей и объявляется union с 2мя DWORD
Члены структы в нормальном порядке. А вот члены union'а в обратном - для union принципиальной рразницы нет, как они расположены. Но в FASM union нет, так что делается он посредством присваивания 2х разных меток одному адресу: Код (Text): struc LARGE_INTEGER { label .QuadPart qword ; +0 размер 8 байт .LowPart dd ? ; +0 размер 4 байт .HighPart dd ? ; +4 размер 4 байт }
S_T_A_S_ Возможно я ошибаюсь, но мне кажется должно быть так: Код (Text): struc LARGE_INTEGER { label .QuadPart qword ; +0 размер 8 байт virtual at label .LowPart dd ? ; +0 размер 4 байт .HighPart dd ? ; +4 размер 4 байт end virtual }
В этом случае размер структуры будет 0 байт. Если использовать virtual, то должно быть так: Код (Text): struc LARGE_INTEGER { .QuadPart dq ? ; +0 размер 8 байт virtual at .QuadPart .LowPart dd ? ; +0 размер 4 байт .HighPart dd ? ; +4 размер 4 байт end virtual } или так Код (Text): struc LARGE_INTEGER { virtual .LowPart dd ? ; +0 размер 4 байт .HighPart dd ? ; +4 размер 4 байт end virtual .QuadPart dq ? ; +0 размер 8 байт }