Все наверное видели туториалы Iczelion'а, решил попробовать переписать DLL из туториала 24 MouseHook под FASM, код привожу ниже. Откомпилировал DLLка получилась на полкило больше, но главное что она рабтает только в окне приложения из которого запущена, для запуска использовал экзешник Iczelion'а. Кто видит ошибку помогите плз Код (Text): format PE GUI 4.0 DLL entry DllEntryPoint include 'C:\FASM\INCLUDE\win32a.inc' WM_MOUSEHOOK = WM_USER + 6 section '.code' code readable executable proc DllEntryPoint hInst,reason,reserved1 push [hInst] pop [hInstance] mov eax,TRUE ret endp proc MouseProc,nCode,wparam,lparam invoke CallNextHookEx,[hHook],[nCode],[wparam],[lparam] mov edx,[lparam] invoke WindowFromPoint,[edx],[edx+4] invoke PostMessage,[hWnd],WM_MOUSEHOOK,eax,0 xor eax,eax ret endp proc InstallHook,hwnd push [hwnd] pop [hWnd] invoke SetWindowsHookEx,WH_MOUSE,MouseProc,[hInstance],NULL mov [hHook],eax ret endp proc UninstallHook invoke UnhookWindowsHookEx,[hHook] ret endp section '.data' data readable writeable hInstance dd 0 hHook dd ? hWnd dd ? section '.idata' import data readable writeable library user,'USER32.DLL' import user,\ SetWindowsHookEx,'SetWindowsHookExA',\ UnhookWindowsHookEx,'UnhookWindowsHookEx',\ CallNextHookEx,'CallNextHookEx',\ WindowFromPoint,'WindowFromPoint',\ PostMessage,'PostMessageA' section '.edata' export data readable export 'MHOOK.DLL',\ InstallHook,'InstallHook',\ UninstallHook,'UninstallHook',\ MouseProc,'MouseProc' section '.reloc' fixups data discardable
babek Все верно. Это происходит из-за того что при заверщении процесса все его открытые описатели закрываются. В данном случае уничтожается установленный хук. Допустим, что мы загрузили DLL и выходим из программы. Счетчик для нашей DLL поставится на ноль и она уничтожиться из адресного пространства процессов. Чтобы этого не случилось для каждого процесса мы загружаем отдельно DLL. Но на самом деле она не загружается, а просто счетчик увеличивается на единицу с каждым новым процессом. Проще говоря, на инициализации хука, ставь еще один LoadLibraryA. Читай. размер архива - 5кб http://webfile.ru/1345589 Там в архиве статья по хукам. Как раз объясняется, как решить твою проблему. Исходники там же.
Большое спасибо nitrotoluol за информативную статью! Но мне кажится дело не в этом потому что я гружу либу как (load-time dynamic linking), а самое главное что прототип на masm32 работает.... a моя dll несовсем
Секции .bss должна быть помечена как pазделяемая, чтобы все пpоцессы pазделяли секцию неинициализиpуемых данных хук-DLL. Без этой опции, DLL функциониpует непpавильно. в masm32 это так: Link /SECTION:.bss,S /DLL /DEF:$(NAME).def /SUBSYSTEM:WINDOWS а как в FASM прописать секцию?
Большое Thanks IceStudent ты спас мой мозг section '.bss' readable writeable shareable hInstance dd 0 hHook dd ? hWnd dd ? и всё ОК