c++ - 拦截 COM dllhost.exe 调用

标签 c++ com intel-pin

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

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

最佳答案

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

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

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

关于c++ - 拦截 COM dllhost.exe 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42508894/

相关文章:

vba - VBA 中的 StringFromIID - 避免手动管理内存的好方法是什么?

c++ - 如何错误处理命令行参数?

c++ - 指针混淆c++

c# - Interop.xxxxx.dll 是如何生成的?

调用托管 DLL 时 COM 互操作引发 EEMessageException

c++ - PIN - 获取正在检测的二进制文件的进程 ID?

c++ - exe和dll共享同一个静态库

c++ - 如何在 C++ 类中声明动态大小的数组字段?

linux-kernel - 为什么 Intel Pin 无法检测 open 系统调用?

linux - 如何从 Linux 上的 Intel Pin 获取地址空间布局?