· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› assume...

Посл.отвђт Сообщенiе


Дата: Фев 6, 2003 14:58:06

Хм-м-м...
В туте Iczelion-а №24 про хуке есть следующий кусок
кода из dll:
invoke CallNextHookEx,hHook,nCode,wparam,lparam
mov edx,lparam
assume edx:ptr MOUSEHOOKSTRUCT
invoke WindowFrompoint,[edx].pt.x,[edx].pt.y
invoke postMessage,hWnd,WM_MOUSEHOOK,eax,0
assume edx:nothing

Известно, что lParam будет указывать на MOUSEHOOKSTRUCT,
но ведь директива assume тоже загрузит адрес этой структуры
в регистр edx. Т.о. строка
mov edx,lparam
не имеет смысла и не нужна (лишние байтики ;).
Или это не так и я плохо выспался?.. ;)


Дата: Фев 6, 2003 15:33:27

но ведь директива assume тоже загрузит адрес этой структуры
assume ничего никуда не загружает. Она вообще не генерит код в бинарник. В данном случае, assume edx:ptr MOUSEHOOKSTRUCT превращает каждое последующее упоминание edx в MOUSEHOOKSTRUCT ptr [edx] в пределах компилятора, вплоть до assume edx:nothing.
В MASM32.HLP есть пара примеров использования assume.


Дата: Фев 6, 2003 15:38:53

Про то, что код не генериться я знаю.
Я просто имел ввиду, что код
mov edx,lparam
не нужен. Или я что-то не понимаю?


Дата: Фев 6, 2003 16:00:25

Если не юзать mov edx,lparam то откуда win32 узнает что адрес MOUSEHOOKSTRUCT для edx нужно грузить именно из lparam? :)


Дата: Фев 6, 2003 16:04:39

Хм...Действительно.
Но ведь убери
mov edx,lparam
и всё равно будет работать.
Странно... ??? :(


Дата: Фев 6, 2003 16:43:09

MOUSEHOOKSTRUCT - это не просто название,
а структура винды, объявленная в WINDOWS.INC
в пакете masm32, как и все остальные.
Т.е. обращаясь к ней ты уже обращаешься
к "памяти винды".
А загружая в edx lparam можно обращаться
к структуре вот так:
mov [ebx+4],29Ah
mov [ebx+8],100h
и т.д. и т.п.
А с assume это дело упрощается и выглядит
понятнее. ;)


Дата: Фев 6, 2003 20:28:35

Но ведь убери
mov edx,lparam
и всё равно будет работать.


Точно будет работать? 100%? Не должно, ведь MOUSEHOOKSTRUCT с координатами лежит именно в lParam, а edx указывает на случайные значения. Т.е. mov edx,lParam таки имеет смысл.


Дата: Фев 6, 2003 23:11:16

Проверь сам. Всё работает - 100%.


Дата: Фев 7, 2003 03:05:07 · Поправил: Quantum

Проверил. Не работает!!!
Убираю mov edx,lParam -- не работает (Handle == 0, WndProc == 0)
Ставлю обратно -- снова работает... :)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.073