необходимо изменить лишь смещение таблицы
; возврат на "цикл" (-19 байтов) db eb ed
m 0 l 200 100 w q
В файле 'header.txt' необходимо изменить лишь смещение таблицы импорта:
; Второй элемент каталога: ; смещение таблицы импорта (4 байта) db 40 20 0 0
Размер таблицы остался тем же. Файл 'make.bat' также остался без изменений. Строим новый файл wnd.exe и запускаем его.
Отличий у данного приложения по сравнению с предыдущим немного - оно также не перемещается, не изменяет размеров и не отвечает на попытки закрыть окно. Тем не менее, одно отличие все же есть: обратите внимание на форму указателя мыши в пределах окна. Он больше не принимает ждущей формы - сообщения забираются из очереди. Но они лишь копируются в одно и то же место и никак не обрабатываются.
Чтобы от сообщений был какой-то толк, их нужно не просто забирать из очереди, но и направлять соответствующему окну. Для этой цели служит еще одна функция из модуля User32.dll - DispatchMessageA. Эта функция принимает лишь один аргумент - адрес структуры MSG, содержащей соответствующее сообщение. Добавим в наше приложение эту функцию.
В секции данных никаких изменений не будет. В секцию .rdata нужно добавить после имеющихся строк строку 'DispatchMessageA', а также указать ее смещение в IAT(2) и таблице поиска в специально оставленных для этого местах. Найдем строку:
; запас для 2-й ф-ции db 0 0 0 0
- и заменим ее на следующую:
; DispatchMessageA db d6 20 0 0
Это нужно сделать в двух местах - в IAT(2) и в таблице поиска для User32.dll. В конец файла нужно добавить строку 'DispatchMessageA':
db 0 0 "GetMessageA" 0 db 0 0 "DispatchMessageA" 0
m 2000 l 200 100 w q
Теперь изменим секцию кода. В файле 'code.txt' найдем строки:
; вызов GetMessageA (по адресу в IAT(2) 402010h) db ff 15 10 20 40 0
Теперь вставим после них инструкции помещения в стек параметра и вызова функции DispatchMessageA:
; параметр DispatchMessageA - адрес MSG (403020h) db 68 20 30 40 0 ; вызов DispatchMessageA (по адресу в IAT(2) 402014h) db ff 15 14 20 40 0
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий