Win32 в машинных кодах


Класс окна - часть 2


Для начала в большинстве полей структуры можно оставить нулевое значение. В обязательном порядке должны быть заполнены лишь поля размера (всегда 30h), описателя приложения, имени класса и адреса главной процедуры окна. Мы будем постепенно знакомиться с полями данной структуры, проводя с ними эксперименты. Главная процедура окна сама по себе представляет собой отдельную большую тему, поскольку фактически вся функциональность нашего приложения определяется именно этой процедурой. Пока мы просто используем предоставляемую системой процедуру окна по умолчанию (DefWindowProcA), которую необходимо импортировать из модуля User32.dll. Там же расположена и другая нужная нам функция - RegisterClassExA, которая используется для регистрации заполненной нами структуры. Таким образом, нам придется добавить в созданный ранее файл rdata.txt две новые функции. С учетом всего этого, файл rdata.txt будет выглядеть следующим образом:

n rdata.bin r cx 200 f 2000 l 200 0 a 2000 ; 1-я IAT (для Kernel32.dll) ; GetModuleHandleA db a4 20 0 0 ; ExitProcess db b8 20 0 0 db 0 0 0 0 ; 2-я IAT (User32.dll) ; CreateWindowExA db c6 20 0 0 ; GetMessageA db d8 20 0 0 ; DispatchMessageA db e6 20 0 0 ; TranslateMessage db fa 20 0 0 ; DefWindowProc db e 21 0 0 ; RegisterClassExA db 20 21 0 0 db 0 0 0 0 ; таблица поиска для Kernel32.dll ; GetModuleHandleA db a4 20 0 0 ; ExitProcess db b8 20 0 0 db 0 0 0 0 ; таблица поиска для User32.dll ; CreateWindowExA db c6 20 0 0 ; GetMessageA db d8 20 0 0 ; DispatchMessageA db e6 20 0 0 ; TranslateMessage db fa 20 0 0 ; DefWindowProcA db e 21 0 0 ; RegisterClassExA db 20 21 0 0 db 0 0 0 0 ; Таблица импорта: 2 записи + завершающая (0) ; запись для Kernel32.dll ; смещение таблицы поиска db 28 20 0 0 db 0 0 0 0 0 0 0 0 ; смещение строки "Kernel32.dll" db 8c 20 0 0 ; смещение IAT(1) db 0 20 0 0 ; запись для User32.dll ; смещение таблицы поиска db 34 20 0 0 db 0 0 0 0 0 0 0 0 ; смещение строки "User32.dll" db 99 20 0 0 ; смещение IAT(2) db 0C 20 0 0 ; завершение таблицы db 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 db "Kernel32.dll" 0 db "User32.dll" 0 db 0 0 "GetModuleHandleA" 0 0 db 0 0 "ExitProcess" 0 db 0 0 "CreateWindowExA" 0 db 0 0 "GetMessageA" 0 db 0 0 "DispatchMessageA" 0 0 db 0 0 "TranslateMessage" 0 0 db 0 0 "DefWindowProcA" 0 0 db 0 0 "RegisterClassExA" 0




Начало  Назад  Вперед