Ассемблер для Windows

       

Начало функции окна



Рисунок 4.6.7. Начало функции окна.

Взглянув на Рисунок 4.6.8, можно убедиться, что это действительно начало некоторой функции. Для того чтобы быть уверенным, что это нужная функция, необходимо сделать некие изменения и проверить результат.

Поставим теперь себе цель, найти ту же самую функцию, но отладчиком SoftIce.

  1. Загружаем загрузчиком LOADER32.EXE программу FILES.EXE в отладчик SoftIce.
  2. Далее Ctrl-D, и мы имеем запущенную программу.
  3. Запускаем диалоговые окна, кроме последнего диалогового окна.
  4. Перед тем как вызвать последнее диалоговое окно, снова войдем в отладчик и установим точку останова на функцию DialogBoxParamA:
  5. ВРХ DialogBoxParamA

  6. Снова входим в программу, запускаем нужное диалоговое окно, при этом происходит автоматический выход в отладчик: сработала точка останова.
  7. Далее нажмем клавишу F11, при этом окажемся в точке вызова либо сразу, либо после закрытия диалогового окна (опять происходит выход в отладчик).
  8. Посмотрев на вызов функции DialogBoxParam, мы легко определим адрес процедуры окна. Разумеется, он совпадает с тем, который мы нашли ранее, с помощью отладчика программы W32Dasm (см. Рисунок 4.6.7).
  9. Продолжая разговор об отладчике SoftIce, замечу, что выход на функцию окна можно проделать и другим способом. При помощи команды HWND можно определить дескрипторы запущенных окон. Далее можно поставить точку останова на содержимое первого параметра, который как раз должен быть равен дескриптору окна. Поставить точку останова можно, например, такой командой

    ВРХ EIP IF(EBP+8==N)

    здесь N - найденный ранее дескриптор окна. После этого остается только проделать что-то с окном, чтобы на функцию его пришло какое-нибудь сообщение.

    57 Простой с точки зрения возможных проблем, возникающих при исправлении исполняемых модулей.



    Содержание раздела