Mytilus Galloprovincialis
Зарегистрирован: 30.08.2005 Сообщения: 358 Откуда: откуда все люди родятся
|
Добавлено: Вт Окт 02 2012 20:56 Заголовок сообщения: Разбор дизассемблированного кода |
|
|
Всем привет!
Разбираю дизассемблированный проект, писавшийся на VC++. А конкретно - функцию WndProc. Вот ее начало:
Код: | hWnd = dword ptr 8
Msg = dword ptr 0Ch
wParam = dword ptr 10h
lParam = dword ptr 14h
01 push ebp
02 mov ebp, esp
03 sub esp, 14h
04 mov eax, [ebp+Msg]
05 mov [ebp-0Ch], eax
06 cmp [ebp-0Ch], 84h
07 ja short loc_77E876
08 cmp [ebp-0Ch], 84h
09 jz loc_77E9B4
10 mov ecx, [ebp-0Ch]
11 sub ecx, 2
12 mov [ebp-0Ch], ecx
13 cmp [ebp-0Ch], 45h
14 ja loc_77EAE4
... |
Не получается вникнуть в логику. Как я понимаю, в пятой строке значение Msg попадает в ebp-0Ch. Дальше, логично было бы предположить, должен пойти "switch case", но на деле вижу такое сравнение (строки 6, 7): Msg > WM_NCHITTEST. Строки 8-9, очевидно, разбираются с Msg == WM_NCHITTEST. Но зачем дальше из [ebp-0Ch] вычитается 2 и проверяется "результат > 45h"? Как подобное могло выглядеть в сишном исходнике? |
|