Фундаментальные основы хакерства


Идентификация аргументов функций - часть 22


; Вызываем

функцию GetMessageA(&msg, NULL, NULL, NULL);

 

test   eax, eax

jz     short loc_40107B

; Проверка на получение WM_QUIT

 

lea    ecx, [ebp+Msg]

; В ECX – указатель на заполненную структуру MSG…

 

push   ecx          ; lpMsg

; …передаем

его функции TranslateMessage

 

call   ds:TranslateMessage

; Вызываем

функцию TranslateMessage(&msg);

 

lea    edx, [ebp+Msg]

; В EDX – указатель на msg…

 

push   edx          ; lpMsg

; …передаем его функции DispatchMessageA

 

call   ds:DispatchMessageA

; Вызов

функции DispatchMessageA

 

jmp    short loc_401051

; Цикл

выборки сообщений

 

loc_40107B:                       ; CODE XREF: main+2Cj

; Выход

 

mov    esp, ebp

pop    ebp

retn

main         endp

 

 

TimerProc    proc near           ; DATA XREF: main+6o

; Прототип TimerProc в следствие ее неявного вызова операционной системой

; не был автоматически восстановлен IDA, - этим придется заниматься нам

; Мы знаем, что TimerProc передается функции SetTimer.

; Заглянув в описание SetTimer (SDK

всегда должен быть под рукой!) мы найдем

; ее

прототип:

;

;VOID CALLBACK TimerProc(

;  HWND hwnd,     // handle of window for timer messages

;  UINT uMsg,     // WM_TIMER message

;  UINT idEvent,  // timer identifier

;  DWORD dwTime   // current system time

;)

;

; Остается разобраться с типом вызова. На сей раз он приниципиален, т.к. не имеея

; кода вызывающей функции (он расположен глубоко в недрах операционной системы),

; мы разберемся с типами аргументов только в том случае, если будет знать их

; порядок передачи.

; Выше уже говорилось, что все CALLBACK

функции следуют соглашению PASCAL.

; Не путайте CALLBACK-функции с Win32 API-функциями! Первые вызывает сама

; операционная система, а вторые – прикладная программа.

;

; ОК, тип вызова этой функции – PASCAL. Значит, аргументы заносятся слевно направо,

; а стек чистит вызываемая функция (убедитесь, что это действительно так).




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