我最近编写了一个快速的 VB.NET 应用程序,它将 DLL 注入(inject)到正在运行的进程中。为了测试它,我创建了自己的 vb.net 类库项目,该项目只是生成一个“Hello World”消息框,希望在我注入(inject) HelloWorld.DLL 后它会出现在目标进程中。
我的问题是,在注入(inject) HelloWorld.DLL 后,消息框永远不会显示。我很确定其原因是因为一旦我的 HelloWorld.DLL 被注入(inject)(因为它是 VB.NET DLL),它就没有 DllMain,因此不知道要执行什么并且什么也不会发生。
我是否必须用 C++ 制作注入(inject) DLL,以便它具有 DllMain?我可以做些什么来解决这个问题吗?或者我对一切都完全错了。
任何见解将不胜感激。谢谢。
最佳答案
虽然 .NET DLL 从技术上讲是 PE 格式的扩展,但正是这种扩展使其与包含纯编译的 native 代码的 DLL 有本质上的不同。为了运行 .NET 代码(托管代码),需要由 .NET 解释器并在 AppDomain 的上下文中执行。
本质上,.NET 将执行大量操作来启动并运行该代码。
微软(祝福他们!)已经写了一篇文章概述了您需要在此处执行的操作 http://support.microsoft.com/kb/828736
另一个选择是不编写纯 C++ 代码,而是创建一个托管 C++ 项目,这将更容易让两者很好地协同工作。顺便说一句,拥有托管 C++ 项目并不意味着所有代码都必须进行管理,AFAIK
关于c# - 将 DLL 注入(inject)目标进程 VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071806/