c# - 将 DLL 注入(inject)目标进程 VB.NET

标签 c# .net vb.net dll code-injection

我最近编写了一个快速的 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/

相关文章:

c# - 较少内存的方法

.net - 使用 Google 帐户通过非 Google API 验证 Chrome 扩展

.net - 如何在没有窗口句柄的情况下使用 RegisterDeviceNotification?

.net - 将信息从引用的类传递回调用表单

c# - 如何以一位数字格式格式化 DateTime 的日期部分?

c# - 在 WCF 的其他契约(Contract)中将 MessageContract 作为 MessageBodyMember

c# - 如何使用 x/y 坐标而不是索引访问 Grid 中的子节点?

c# - 在 .NET 中捕获存储过程打印输出(不同的模型!)

c# - 如何将运行时错误更改为英文

javascript - Web浏览器注入(inject)Javascript将焦点设置到第一个输入框