Код (Text): invoke CoInitialize,0 invoke CoCreateInstance,addrCLSID_Interf,0,CLSCTX_ALL,addr IID_Interf,addr lpInterf test eax,eax js proc_end mov eax,lpInterf mov edi,[eax] HookProc,[edi].IInterface.Method5,addr NewProc
Пытаюсь перехватить метод ком интерсейса, адрес процедуры поидее должен быть один и тот же, но почему-то перехватчик не срабатует. Может надо не в том процессе, я перехватываю в процессе Explorer.exe интерфейс IShellWindows.
процедура HookProc работает 100% Прос статьи на рсдн.ру я знаю, но еще их не читал) И еще, когда я на прямую вызываю этот метод после установки перехвата - перехватчик срабатывает.
Я подозреваю, что я работаю не на прямую с компонентом, а с каким-то прокси. Мне нужно добраться к начальному коду компонента, который находится в длл, пройти все proxy/stub и получить процедуру которая обслуживает определенный метод интерфейса. Подскажите как это сделать?
Прочитал статьи Перехват методов COM интерфейсов и Перехват методов COM интерфейсов - 2 В них особое внимание уделено вещам, с которыми ассемблерщик сталкивается каждый день. Но я не нашел, как все-таки выйти на исходный компонент? "... компилятор MIDL генерирует пару структур CInterfaceProxyVtbl и CInterfaceStubVtbl, которые содержат исчерпывающее описание интерфейса для маршалинга стандартными средствами COM." "Для Stub доступна примерно такая же информация – IID интерфейса, дополнительная информация для интерпретатора pServerInfo, количество методов в vtbl, адреса обработчиков pDispatchTable и vtbl стандартных методов Stub – IRpcStubBuffer. pDispatchTable, как и у Proxy, либо содержит сгенерированные MIDL адреса функций-обработчиков, либо 0 – для полностью интерпретируемого Stub." Т.е. Stub интерфейс должен знать гед находится Vtbl исходного компонента. Как на него выйти, подскажите плиз?