我给自己设置了一项新任务,这项任务涉及“监视”COM对象。
即使您不使用COM,您也可能熟悉API挂钩技术,在这种技术中,您可以挂钩导入的函数,并在调用原始函数之前执行自己的代码。API挂钩有点复杂,但如果您试图挂钩到COM对象方法,它很快就会变得混乱(对于生产代码来说太混乱了)。
因此,目前,为了完成“我的工作”,我为CoCreateInstance设置了一个API hook,并为我感兴趣的接口分派了手写的代理。虽然接口不是很多,但也不是最好的解决方案。
有没有一种更整洁的方式,最好不使用API挂钩?
另外,这篇文章看起来很棒,但是这个二进制文件不再工作了(我猜它是在Win98 http://www.ddj.com/windows/184416546?pgno=5前后写的)。有没有人知道它的内部原理,可以给我指出让它再次工作的正确方向?
谢谢
发布于 2009-10-02 10:11:54
我绝对推荐使用Keith Brown的“Universal Delegator”来做低级拦截。Kim Grasman提到的ComTrace工具使用它。它允许您将任意的com对象包装在一个可以进行拦截、日志记录等操作的“外壳”中。描述通用委托器的原始文章(带有代码)是here和here。
如果您想在任意进程(您没有源代码)中监视com对象,那么您还需要使用CreateRemoteThread()或类似的方法进行代码注入。如果你以前没有做过,有一篇文章here可能会让你入门。
发布于 2009-10-02 05:10:32
我没有明确的答案,但我认识一个人,他可能会:)
Jonas Blunck's工具都是关于不同层次的拦截,如果我没记错的话,他的ComTrace基于Keith Brown的技术,听起来和你正在做的类似,除了他解析类型库和头文件来动态跟踪接口。
我们一起写了Developer Playground (我主要是做UI的),它是基于API hooking的,我知道Jonas说他想修改ComTrace来使用相同的API hooking库,因为它为拦截提供了最好的“解决方案”。
我不知道你想用这个做什么,但我建议你检查一下Jonas的工具,给他发一封电子邮件--他也许能把你引向正确的方向。
https://stackoverflow.com/questions/1505196
复制相似问题