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 授權。