是否可以通过.NET进行x86汇编程序?

时间:2020-03-06 14:45:49  来源:igfitidea点击:

我可以通过C#调用x86汇编器吗?我希望能够将x86指令作为字符串传递并返回字节数组。如果不存在,我该怎么做?

明确地说,我不想从CI调用汇编代码,只是希望能够从指令中汇编代码并以字节数组获取机器代码。我将注入此代码(将动态生成)以将其完全注入另一个进程。

解决方案

看一下这一点:CodeProject:在C#中使用非托管代码和汇编。

不是直接来自Cyou不能的。但是,我们可能会编写自己的包装器类,该包装器类使用外部汇编器来编译代码。因此,我们可能会将程序集写到文件中,使用.NET Framework启动执行汇编程序的新进程,然后使用System.IO由汇编器打开生成的文件以拉出字节溪流。

但是,即使我们做了所有这些工作,如果我们不遇到安全问题,我将感到非常惊讶。在每个新的OS中,将可执行代码注入完全不同的过程中的可能性越来越小。有了Vista,我相信我们肯定会被拒绝的。甚至在XP中,我认为当我们尝试写入另一个进程的内存时,我们也会遇到拒绝访问的异常。

当然,这提出了一个问题,为什么我们需要这样做。当然,必须有一种更好的方法:)。

作为我在个人项目中所做的一些早期原型设计的一部分,我编写了很多代码来完成类似的工作。它不需要字符串-x86操作码是X86Writer类上的方法。它完全没有文档记录,并且几乎没有完整的覆盖范围,但是如果感兴趣的话,我愿意根据新的BSD许可对其进行开源。

更新:
好的,我已经创建了该项目-Managed.X86

我认为编写本地Win32 dll最好。然后,我们可以在从dll导出的汇编器中编写一个函数。然后,我们可以使用Cto动态链接到dll。

这与传递字符串并返回字节数组并不完全相同。为此,我们将需要一个x86汇编器组件或者masm.exe周围的包装器。

我不知道这是如何工作的,但是我们可以shell执行一个外部编译器,然后加载在字节数组中生成的对象。

Cosmos还对生成x86代码提供了一些有趣的支持:

http://www.gocosmos.org/blog/20080428.en.aspx

看看Microsoft Research的Phoenix。