.net - 将 CLR 主机注入(inject)正在运行的进程 - 可能吗?

标签 .net x86 code-injection clr-hosting

我知道这就是疯狂。

我有一个可执行文件(我无权访问的源代码),我想通过 .NET 对其进行扩展。它是一个 native 可执行文件,因此我需要注入(inject)一个 CLR 主机才能执行此操作。我的基本想法是通过 .NET 语言(例如 C#)提供类似脚本的功能,并在目标可执行文件中提供 Hook 供脚本操作,反之亦然。

我知道我需要使用各种技术来实现此目的 - DLL 注入(inject)、一些运行时 ASM 注入(inject)等,但我想知道的是:我所说的可能吗?更好的是 - 以前有人做过这样的事情吗?

最佳答案

如果您的 native 可执行文件能够使用 COM 对象,您可以使用 COM 互操作来执行此操作。如果您为互操作注册 .NET 程序集,那么您的 native 可执行文件可以像“普通”COM 对象一样使用您的 .NET 类,并且在创建第一个类时,它将在 native 进程内启动 CLR。类似地,如果您可以从 native 可执行文件中公开 COM 对象,那么如果您创建互操作程序集(或者甚至没有类型库,如果您仅使用 IDispatch),则可以从您的 .NET 代码中使用它们。

基础知识很简单,但我只是触及皮毛 - 对于像这样的严肃项目,您需要一本严肃的引用资料。我强烈推荐.NET and COM, The Complete Interoperability Guide亚当·内森。这是一本没有太多内容的大书,它还有很多关于设计 .NET 和 COM 类以干净地互操作的重要信息。它还解释了如何在 native 应用程序中直接托管 CLR,但如果不访问源代码,该选项可能不切实际。我肯定会从 COM 互操作路线开始,如果您没有其他选择,则只在 native 托管 CLR。​​

关于.net - 将 CLR 主机注入(inject)正在运行的进程 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/787343/

相关文章:

.net - 如何在注册表中存储 SecureString?

assembly - 在 x64 位处理器上编写 x86 程序集

x86 - 是否可以在支持Intel IA-32e模式的操作系统中运行16位代码?

c - 程序集,无法将数组值从堆栈添加到寄存器

c# - 如何加载静态字段?

c# - ComboBox在下拉时如何捕获鼠标?

.net - 使用 oracle.dataaccess.dll 时出错

java - Spring 3 JavaConfig - 注入(inject)数据源时出现问题

php - 简单的 if-else php 注入(inject)

javascript - 即使使用 setJavascriptEnabled(true) 和 WebChromeClient,Android webview 也会跳过 javascript