C# 将.Net进程注入Unity进程

C# 将.Net进程注入Unity进程,c#,.net,unity3d,C#,.net,Unity3d,我想知道如何将C#DLL注入Unity进程。由于Unity拥有一个CLR(当它运行mono-MSIL时),我可以想象我可以玩反射 那么,我应该如何将.NET DLL注入到.NET进程中,以及一旦我在其中,我可以在反射方面做些什么呢 比如说。假设我有一个使用unity3d作为引擎的游戏,大部分代码都是用C#编写的(这并不重要,因为unity似乎无论如何都会将unityscript编译成.net)。我想用我自己的代码扩展这个已经编写好的代码库 通常,在一个正常的本机进程中,您会开始反转代码,查找内存

我想知道如何将C#DLL注入Unity进程。由于Unity拥有一个CLR(当它运行mono-MSIL时),我可以想象我可以玩反射

那么,我应该如何将.NET DLL注入到.NET进程中,以及一旦我在其中,我可以在反射方面做些什么呢

比如说。假设我有一个使用unity3d作为引擎的游戏,大部分代码都是用C#编写的(这并不重要,因为unity似乎无论如何都会将unityscript编译成.net)。我想用我自己的代码扩展这个已经编写好的代码库

通常,在一个正常的本机进程中,您会开始反转代码,查找内存中出现的指针和数据结构,并在执行过程中理解代码。然后在代码中编写相同的结构,获得对该进程内存的rwx访问权(通常通过向该进程中注入dll),然后访问town

然而,由于unity使用.net,我想知道是否有更好的方法。我想利用.net framework的反射功能。为此,我认为我需要将代码注入unity进程。从那以后,我不知道工作流会是什么样子


长话短说:我想将一个DLL(有效负载用C#编写)(希望使用反射而不是指针)注入到一个外部进程(我在编译时无法控制它),然后处理进程内部的类和函数。

将DLL放入一个资产文件夹中

Assets/Libs/MyLib.dll
打开任何CS文件并在MonoDevelop解决方案中添加引用。 退出MonoDevelop时,Unity将重新蚀刻解决方案文件并导入dll的引用。 现在,您可以像往常一样使用在MonoDevelop中编写的Unity代码中的库。 您的代码与任何其他API(如
System.IO
)之间没有区别

请注意.NET framework版本,不要混用代码。 为了安全起见,请使用.NET2.0。。。等待我不记得了,但应该是2.0。。。不要引用我的话


一旦你到了那里,你可以做一切正常的事情。

一个选项是.cctor函数(模块初始值设定项),它不会在程序集加载时运行,而是第一次调用dll

以前,我认为这是使用.net可以获得的最早版本,但显然我错了:

有一个可怕的,令人讨厌的黑客让你在.net中运行一个DllMain-

这当然不是.net的创建者想要的。使用时要小心


这可以让你的代码运行,一旦进入,你就可以像正常情况一样调用System.Reflection并做任何你想做的事情。

你需要一个更具体的场景来获得正确的响应。我只是给了他一个正确的响应。这不是我的意思。我试着更具体地回答我最初的问题。我为原始问题的模糊性道歉。我读了你的编辑,我不知道。我想知道的是,如果在被注入者一侧没有扩展点,您希望如何注入代码。我从来没有觉得有必要做这样的事情:)原因是好奇心比什么都重要。如果你知道C++注入是如何工作的,那就是我想要做的,但是我想知道.NET框架和反射是否可以让它更简单更有趣。整个想法是,你通过“强迫”你的方式来建立你自己的扩展点。