Код (Text): typedef struct _INPUT_RECORD { WORD EventType; union { KEY_EVENT_RECORD KeyEvent; MOUSE_EVENT_RECORD MouseEvent; WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; MENU_EVENT_RECORD MenuEvent; FOCUS_EVENT_RECORD FocusEvent; } Event; } INPUT_RECORD; подскажите, как переписать для fasm'а данную структуру.
t00x Код (Text): struct INPUT_RECORD EventType dw ? union KeyEvent KEY_EVENT_RECORD MouseEvent MOUSE_EVENT_RECORD ... ends ends
IceStudent Imho Код (Text): struct INPUT_RECORD EventType dw ? __alignmentDummy dw ? union KeyEvent KEY_EVENT_RECORD ...
t00x Попробуй: Код (Text): #include <windows.h> #include <stdio.h> int main(void) { printf("%d\n", FIELD_OFFSET(INPUT_RECORD, Event)); return 0; }
q_q довесок к INPUT_RECORD: Код (Text): struct KEY_EVENT_RECORD bKeyDown dw ? wRepeatCount dw ? wVirtualKeyCode dw ? wVirtualScanCode dw ? union UnicodeChar dw ? AsciiChar db ? ends dwControlKeyState dw ? ends прочитал из памяти Olly и поменял high-low bytes: 0001 0000 0001 0000 0001 0020 0039 0020 0000 Код (Text): EventType = 0001 00402018 - адрес INPUT_RECORD.EventType 0040201A - адрес INPUT_RECORD.KEY_EVENT_RECORD.bKeyDown если так, как вы пишите, то и INPUT_RECORD.EventType и INPUT_RECORD.KEY_EVENT_RECORD.bKeyDown имеют размерность dd. P.S. нажимал пробел
t00x если так, как вы пишите, то и INPUT_RECORD.EventType ... имеют размерность dd. Не правда. Я утверждал, что после INPUT_RECORD.EventType, который занимает два байта, следуют два байта для выравнивания. INPUT_RECORD.KEY_EVENT_RECORD.bKeyDown имеют размерность dd. В этом можешь убедиться сам Код (Text): #include <windows.h> #include <stdio.h> int main(void) { // проверка "по рабоче-крестьянски" KEY_EVENT_RECORD ker; printf("%d\n", sizeof(ker.bKeyDown)); // проверка "по-научному" printf("%d\n", RTL_FIELD_SIZE(KEY_EVENT_RECORD, bKeyDown)); return 0; } dwControlKeyState dw ? Ошибка. dwControlKeyState имеет размер четыре байта. Проверь Код (Text): printf("%d\n", RTL_FIELD_SIZE(KEY_EVENT_RECORD, dwControlKeyState));