0

我正在尝试使用Intel Pin检测 COM DLL 。不幸的是,英特尔 Pin 设计用于检测独立进程,而不是 DLL。

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

4

1 回答 1

2

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

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

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

于 2017-02-28T12:49:10.050 回答