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


Сообщения Windows - часть 7


Добавим эту функцию. Для этого в конце файла 'rdata.txt' добавляем соответствующую строку:

db 0 0 "GetMessageA" 0 db 0 0 "DispatchMessageA" 0 0 db 0 0 "TranslateMessage" 0

m 2000 l 200 100 w q

Второй 0 после "DispatchMessageA" нужен для выравнивания начала следующей строки по четному адресу. Необходимо также изменить (тоже в двух местах - для IAT(2) и таблицы поиска User32.dll) строки:

; запас для 3-й ф-ции db 0 0 0 0

на строки:

; TranslateMessage db ea 20 0 0

В файле code.txt очередные 11 байтов нужно добавить до вызова DispatchMessageA (не забыв изменить смещение в инструкции безусловного перехода на начало цикла), так что конец файла будет выглядеть так:

; вызов GetMessageA (по адресу в IAT(2) 402010h) db ff 15 10 20 40 0 ; параметр TranslateMessage - адрес MSG (403020h) db 68 20 30 40 0 ; вызов TranslateMessage (по адресу в IAT(2) 402018h) db ff 15 18 20 40 0 ; параметр DispatchMessageA - адрес MSG (403020h) db 68 20 30 40 0 ; вызов DispatchMessageA (по адресу в IAT(2) 402014h) db ff 15 14 20 40 0 ; возврат на "цикл" (-41 байт) db eb d7

m 0 l 200 100 w q

Вот теперь, построив очередную версию wnd.exe, мы получим почти полноценный текстовый редактор! Хотя пока он работает лишь с одной строкой; но зато создан полностью в машинных кодах!

На сегодня этого достаточно. Не забудьте "прибить" работающие приложения - закрытия окна недостаточно для их завершения (пока). В заключение хочу заметить, что подобный способ завершения приложений, конечно, не является нормальным, и система может начать (и, возможно, у вас уже не раз начинала) работать нестабильно, так что придется ее перезагружать. Поэтому перед началом таких экспериментов лучше закрыть все остальные приложения, особенно, если вы работаете в них с важными данными.




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



Книжный магазин