拦截COM dllhost.exe调用

时间:2017-02-28 12:33:32

标签: c++ com intel-pin

我正在尝试使用Intel Pin检测COM DLL。不幸的是,英特尔Pin专为检测独立processes,而不是DLL。

所以我的问题是 - 是否有可能影响COM使用的命令行来启动inproc服务器主机(dllhost.exe),以便我可以使用dllhost.exe作为参数调用pin.exe?或者将dllhost.exe的调用硬编码到Windows中,这意味着我的想法是徒劳的?

1 个答案:

答案 0 :(得分:2)

DLLHost.exe是DLL代理的示例,它允许您在单独的可执行文件中实例化DLL COM服务器。您可以使用DllSurrogateExecutable注册表项指定要使用的任意可执行文件,并且可以实现自己的DLL代理可执行文件code,它直接使用Pin。

当然,另一个问题是如何创建COM对象。 DLL代理仅在类AppID注册时使用,该AppID指定它可以使用DLL代理 COM对象的创建者指定CLSCTX_LOCAL_SERVER到CoCreateInstance等。如果是这种情况,您可能需要修改调用者以更改上下文。

为了计算你的类注册的AppID,你可以使用一些工具,比如OleView,但是从注册表编辑器中做起来并不难。如果您获得了CLSID GUID,请在HKEY_CLASSES_ROOT\CLSID\GUID下搜索该内容。在那里你可能会找到一个AppID值。这是一个指向HKEY_CLASSES_ROOT\AppID\GUID2的GUID,其中包含它是否已注册为DLL代理,以及您可以将DllSurrogateExecutable密钥放在哪里。