Proyek ini mengimplementasikan perpustakaan injeksi Majelis .NET (terinspirasi oleh proyek snoopwpf). Proses jarak jauh dapat dikelola atau tidak dikelola.
Saat Anda ingin menginjeksi perakitan dalam proses jarak jauh, Anda harus mempertimbangkan aspek-aspek berikut:
Jika prasyarat di atas terpenuhi, Anda dapat memasukkan perakitan dan menjalankan metode aktivasi. Ada tiga kemungkinan untuk menjalankan metode aktivasi:
Pustaka ini juga digunakan oleh Shed untuk menyuntikkan DLL dalam proses jarak jauh. Anda dapat melihat videonya di sini.
Untuk contoh praktis lihat proyek TestRunner.
Jika rakitan yang disuntikkan memiliki dependensi pada rakitan .NET yang bukan standar, Anda dapat menambahkan dependensi tersebut dengan metode AddDependency
.
Jika rakitan yang disuntikkan perlu memuat beberapa file eksternal agar berfungsi dengan benar (seperti file konfigurasi), Anda dapat menentukannya dengan metode AddFile
. Metode ini akan menyalin file tertentu di direktori kerja dari proses yang disuntikkan.
Dalam beberapa kasus, perlu untuk menyampaikan argumen ke metode yang dipanggil dalam rakitan yang disuntikkan. Hal ini dicapai dengan meneruskan objek context
ke metode Inject
. Kemudian, metode Injected
perlu memasukkan objek context
ke tipe sebenarnya (lihat contoh AssemblyWithMethodAcceptingAnArgument
). Kerangka kerja ini menggunakan kelas BinaryFormatter
untuk membuat serialisasi objek context
, jadi pastikan bahwa objek yang ditentukan dapat diserialkan.
Mari kita perhatikan kode berikut:
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!");
}
}
}
untuk menginjeksi Majelis yang dihasilkan dari kode di atas cukup menggunakan kode berikut:
var pid = 1234;
var injector = new Injector(pid, Assembly.LoadFile("AssemblyToInject.dll"));
var injectionResult = injector.Inject();
Untuk contoh lebih lanjut lihat folder contoh.
ManagedInjector saat ini dikembangkan menggunakan VisualStudio 2017 Community Edition (pastikan Anda menginstal versi terbaru). Untuk membuat kode sumber, pastikan Anda harus:
build.bat
Kami menggunakan SemVer untuk pembuatan versi. Untuk versi yang tersedia, lihat tag pada repositori ini.
Managed Injector dilisensikan di bawah Creative Commons.