Учебник хакера


Softice - часть 15


Из исходного текста программы (файл wininfo.c) видно, что функция LockWindowInfo получает в качестве входного аргумента один параметр HWND (Handle Window) – дескриптор окна, и возвращает в вызывающую функцию одно значение – указатель на переменные для данного окна. То есть если бы мы заставили срабатывать точку останова только на обработчик окна POLYDEMO, мы бы добились своей цели. Для начала нам необходимо узнать дескриптор нашего окна, для этого воспользуемся командой:

:HWND GDIDEMO

WindowHandle hQueue SZ Qowner ClassName WindowProcedure
0724(1) 10FF 32 GDIDEMO GDIDEMO 365F:000001C4
 0728(2) 10FF 32 GDIDEMO MdiClient 17A7:00001988
  0734(3) 10FF 32 GDIDEMO BOUNCEDEMO 365F:00000232
  0730(3) 10FF 32 GDIDEMO POLYDEMO 365F:000001DA
  072C(3) 10FF 32 GDIDEMO DRAWDEMO 365F:0000021c

дескриптор окна POLYDEMO имеет значение 0730, если в списке вы не увидели нужного окна, то запустите приложение клавишей X или G, опять сработает точка останова, проверьте, создалось ли окно, если нет, то повторите последние действия. Теперь можно останавливать исполнение программы только в том случае, когда в качестве параметра для функции LockWindowInfo используется значение 0730. В Windows параметры для функции обычно передаются через стек. При остановке в функции LockWindowInfo стек будет выглядеть следующим образом (посмотреть содержимое стека можно подведя курсор к регистру ESP, нажав правую кнопку мыши вызвать контекстное меню и выбрать команду Display, неплохо бы еще сменить командой DD формат вывода данных в DataWindow на показ двойных слов, так как наше приложение 32-разрядное):

ESP = 0055FC00

013F:0055FC00 00404852 00000730 0055FC3C 00008CAA

число 00404852 – это адрес, на который программа перейдет после завершения работы нашей функции (адрес возврата);

число 00000730 – это дескриптор окна POLYDEMO (собственно то, что нас интересует);

Теперь зная, где и что у нас передается в функцию, мы можем выставить условную точку останова.


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