【发布时间】:2017-02-17 12:40:59
【问题描述】:
我有一个来自可以工作的 c++ 应用程序的二进制数据。我想直接从我的 C# 应用程序运行特定的二进制代码。
我有这个从网上得到的功能:
static void MemExe(byte[] buffer)
{
Assembly asm = Assembly.Load(buffer);
if (asm.EntryPoint == null)
throw new ApplicationException("No entry point found!");
MethodInfo ePoint = asm.EntryPoint;
object ins = asm.CreateInstance(ePoint.Name);
ePoint.Invoke(ins, null);
}
它适用于 C# 二进制代码,但如果我尝试打开 C++ 二进制代码,它会崩溃。
这里的例外:
附加信息:无法加载文件或程序集“加载了 5154816 字节的测试,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null”或其依赖项之一。试图加载格式不正确的程序。
我猜这与标题有关?我不是专家...
是否可以像 MemEx 函数一样运行 c++ 二进制文件 运行 C# 二进制文件?
谢谢。
【问题讨论】:
-
assembly.Load()方法或其重载无法加载非托管库(例如 C/C++ dll)。您需要使用 C# 的 interoperability 功能(例如DllImportAttribtute)。 Google for C/C++ interoprability/pinvoke 了解更多信息。 -
这个question 可能会有所帮助。
-
@f.nasim 谢谢。但在那个问题中,我认为用户正在尝试执行 dll 本身内部的函数。我不想要那个。我有一个用 C++ 编写的完整应用程序,我想直接运行它的二进制代码。
-
@f.nasim 而且,我需要在运行 C++ 应用程序之前对其进行解密。
-
@MichalHainc 但我不想创建任何文件来运行它。我想从内存中运行它或在其他进程中注入代码。