我正在尝试使用Intel Pin检测COM DLL。不幸的是,英特尔Pin专为检测独立processes,而不是DLL。
所以我的问题是 - 是否有可能影响COM使用的命令行来启动inproc服务器主机(dllhost.exe),以便我可以使用dllhost.exe作为参数调用pin.exe?或者将dllhost.exe的调用硬编码到Windows中,这意味着我的想法是徒劳的?
答案 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密钥放在哪里。