ManagedInjector
2.0.0
该项目实现了.NET 程序集注入库(它受到 snoopwpf 项目的启发)。远程进程可以是托管进程,也可以是非托管进程。
当您想在远程进程中注入程序集时,您必须考虑以下方面:
如果满足上述先决条件,您可以注入程序集并调用激活方法。可以通过三种方式调用激活方法:
Shed 还使用该库在远程进程中注入 DLL。您可以在此处观看视频。
有关实际示例,请参阅 TestRunner 项目。
如果注入的程序集对非标准 .NET 程序集有任何依赖项,则可以使用AddDependency
方法添加这些依赖项。
如果注入的程序集需要加载一些外部文件才能正常工作(如配置文件),您可以使用AddFile
方法指定它们。该方法将复制注入进程的工作目录中的指定文件。
在某些情况下,有必要将参数传递给注入程序集中调用的方法。这是通过将context
对象传递给Inject
方法来实现的。然后, Injected
方法需要将context
对象转换为真实类型(有关示例,请参阅AssemblyWithMethodAcceptingAnArgument
)。框架使用BinaryFormatter
类来序列化context
对象,因此请确保指定的对象可以被序列化。
让我们考虑以下代码:
using System;
namespace InjectedAssembly
{
public class Main
{
// we use a default injection method name in order to execute our code in the remote process
private static void Inject()
{
Console.WriteLine("Hello world from the injected process!");
}
}
}
为了注入从上述代码生成的程序集,使用以下代码就足够了:
var pid = 1234;
var injector = new Injector(pid, Assembly.LoadFile("AssemblyToInject.dll"));
var injectionResult = injector.Inject();
有关更多示例,请查看示例文件夹。
ManagedInjector目前是使用 VisualStudio 2017 Community Edition 开发的(请确保安装了最新版本)。要构建源代码,请确保您必须:
build.bat
我们使用 SemVer 进行版本控制。有关可用版本,请参阅此存储库上的标签。
Managed Injector 已获得 Creative Commons 许可。