|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 8, 2004 03:21:21 Пытаюсь получить адрес WndProc другого приложения, и на invoke SetWindowLong,hSub,GWL_WNDPROC,ADDR HookProc возвращается ноль, на вызов GetLastError: описание ошибки - "Отказано в доступе" A SPY++ показывает адрес WndProc, без проблем. Как можно получить доступ к этой процедуре, чтобы самому обработать одно из сообщений, которое в ней не обрабатывается? Заранее спасибо |
|
|
Дата: Ноя 8, 2004 03:59:48 внедриться в процесс |
|
|
Дата: Ноя 8, 2004 09:53:57 Мне кажется, можно обойтись без доступа к WndProc, достаточно поставить хук на сообщение |
|
|
Дата: Ноя 8, 2004 16:17:00 vinnie_pooh Я вот ставлю его (хук), а он падает, иногда вместе с Виндой на пару :( Сначала процедура обработки HookProc была в ехе, затем перенёс в dll, но что-то танцы с бубном не помогают :(( Где тут может быть засада? ;тут получение адресов 2-х процедур из dll
;адреса получаю корректно
.elseif eax==WM_CREATE
invoke LoadLibrary,ADDR LibName
.if eax!=0
mov hLib,eax
invoke GetProcAddress,hLib,ADDR ProcName1
mov hProc1,eax
invoke GetProcAddress,hLib,ADDR ProcName2
mov hProc2,eax
.endif
;тут ставлю хук на сообщения
invoke GetWindowRect,hWin,ADDR Rct
dec Rct.left
invoke WindowFromPoint,Rct.left,Rct.top
mov hSub,eax
; установка хука на сообщения, hProc2 - адрес процедуры обработки в dll.
invoke SetWindowsHookEx,WH_GETMESSAGE,hProc2,hInstance,0
mov hScrHook,eax
push hScrHook ;хэндл хука
push WM_MOUSEWHEEL ;интересующее сообщение
push hSub ;хэндл окна, для которого сообщение
Call hProc1 ;процедура установки 3-х значений^^
;а здесь две процедуры в dll: первая - её адрес в ехе hProc1
SetHookData proc hWin:DWORD, HookMessage:DWORD, hHook:DWORD
.data
HookWnd dd ?
HookMsg dd ?
hScrHook dd ?
.code
push hHook
pop hScrHook
push hWin
pop HookWnd
push HookMessage
pop HookMsg
PrintHex HookWnd ;хендл хука, хэндл окна и код интересующего сообщения приходят нормально
PrintDec HookMsg
PrintDec hScrHook
ret
SetHookData endp
;вторая процедура - её адрес в ехе - hProc2
HookProc proc hCode:DWORD, wParam:DWORD, lParam:DWORD
invoke Beep,1000,100 ;это как индикатор :)
mov eax,hCode
.if eax<0
invoke CallNextHookEx,hScrHook,hCode,wParam,lParam
ret
.else
mov eax,lParam
cmp eax,HookMsg
jne @F
ret
@@:
invoke CallNextHookEx,hScrHook,hCode,wParam,lParam
ret
.endif
xor eax,eax
ret
HookProc endp
и ни хрена не бикает вторая процедура. Не вызывается вообще :( Пробовал WH_CALLWNDPROCRET поставить - Винда падает... masquer А может у тебя какой пример найдётся, а то поиск мне только предложил внедриться в процесс производства каких-то макарон :) (через ya.ru) |
|
|
Дата: Ноя 8, 2004 16:55:20 Помоему ICEZLION предупреждал что хук должен находиться в библиотеке.. которая должна меппироваться в процесс нужный (ID процесса указываешь про установке хука) Так что читай внимательно ! |
|
|
Дата: Ноя 8, 2004 20:20:10 Почитал IsZelion: в нём указано, что секция неинициализированных данных должна быть разделяемая между процессами, якобы это реализуется через опции линкера /SECTION:.bss,S Пытаюсь указать эту опцию в RadASM'e - он все что после .bss воспринимает как имя файла и на такую строку 7,O,$B\LINK.EXE /SECTION:.bss,S /SUBSYSTEM:WINDOWS /RELEASE /DLL /DEF:$6 /LIBPATH:"$L" /OUT:"$7",3 выдаёт ошибку, что не найден файл S /SUBSYSTEM:WINDOWS /RELEASE /DLL /DEF:$6 /LIBPATH:"$L" /OUT:"$7",3 А как указать RadASM'у, что секция разделяемая (S) - не знаю. Пробовал использовать makefile из туториала (из примера) - он тоже не работает. DLL не создаётся. Такой вот капкан :((( А сама dll работает, но выдаёт сообщения только адресуемые моему окну, а мне они нахрен не нужны, нужны чужие. |
|
|
Дата: Ноя 8, 2004 21:18:01 Радасм не слинкует ее вот я создал *.BAT файлик все отлично линкуеться ... сам проверял (причем недавно)... @echo off E:\ASM\masm32\bin\ml /c /coff /Cp Splash_dll.asm E:\ASM\masm32\bin\Link /SECTION:.bss,S /DLL /DEF:Splash_dll.def /SUBSYSTEM:WINDOWS /LIBPATH:E:\ASM\masm32\lib Splash_dll.obj pause и еще в своем исходнике пропиши пути к инклюдам иначе нихера не закомпилиться |
|
|
Дата: Ноя 8, 2004 21:42:51 TermoSINteZ и еще в своем исходнике пропиши пути к инклюдам иначе нихера не закомпилиться Да, я тут шёл сказать, что пришлось все пути к инклюдам указать полностью, а не относительные. Как и в .bat'e Усё работает :) Спасибо всем |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066 |