โปรเจ็กต์นี้ใช้ไลบรารีการฉีด .NET Assembly (ได้รับแรงบันดาลใจจากโปรเจ็กต์ 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!");
}
}
}
เพื่อที่จะฉีด Assembly ที่สร้างจากโค้ดด้านบน ก็เพียงพอที่จะใช้โค้ดต่อไปนี้:
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