This project implements a .NET Assembly injection library (it is inspired by the snoopwpf project). The remote process can be a managed or unmanaged one.
When you want to inject an assembly in a remote process you have to consider the following aspects:
If the above pre-conditions are satisfied you can inject an assembly and invoke an activation method. There are three possibilities to invoke the activation method:
This library is also used by Shed to inject a DLL in a remote process. You can see a video here.
For practical examples see the TestRunner project.
If the injected assembly has any dependencies on not standard .NET assemblies, you can add those dependencies with the AddDependency
method.
If the injected assembly needs to load some external file in order to work correctly (like a configuration file) you can specify them with the AddFile
method. This method will copy the specified file in the working directory of the injected process.
In some case is necessary to pass an argument to the method called in the injected assembly. This is achieved by passing a context
object to the Inject
method. Then, the Injected
method needs to cast the context
object to the real type (see AssemblyWithMethodAcceptingAnArgument
for an example). The framework uses the BinaryFormatter
class to serialize the context
object, so be sure that the specified object can be serialized.
Let's consider the following code:
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!");
}
}
}
in order to inject the Assembly generated from the above code it is enough to use the following code:
var pid = 1234;
var injector = new Injector(pid, Assembly.LoadFile("AssemblyToInject.dll"));
var injectionResult = injector.Inject();
For more examples have a look at the example folder.
ManagedInjector is currently developed by using VisualStudio 2017 Community Edition (be sure to have the latest version installed). To build the source code be sure you have to:
build.bat
We use SemVer for versioning. For the versions available, see the tags on this repository.
Managed Injector is licensed under the Creative Commons.