C# NET的汇编程序库,将运行时变量字符串汇编成机器代码以供注入

C# NET的汇编程序库,将运行时变量字符串汇编成机器代码以供注入,c#,assembly,x86,C#,Assembly,X86,有没有x86汇编程序可以通过C#调用?我希望能够以字符串形式传递x86指令,并获取一个字节数组。如果一个不存在,我怎么能创造我自己的 我不想从C#调用汇编代码,我只想能够从指令中汇编代码,并以字节数组的形式获取机器代码 我将注入此代码(将动态生成)以注入另一个进程。看看这个:。不是直接从C生成的,你不能。但是,您可以编写自己的包装器类,使用外部汇编器编译代码。因此,您可能会将程序集写入一个文件,使用.NET Framework启动一个执行汇编程序的新进程,然后使用System.IO打开汇编程序生

有没有x86汇编程序可以通过C#调用?我希望能够以字符串形式传递x86指令,并获取一个字节数组。如果一个不存在,我怎么能创造我自己的

我不想从C#调用汇编代码,我只想能够从指令中汇编代码,并以字节数组的形式获取机器代码

我将注入此代码(将动态生成)以注入另一个进程。

看看这个:。

不是直接从C生成的,你不能。但是,您可以编写自己的包装器类,使用外部汇编器编译代码。因此,您可能会将程序集写入一个文件,使用.NET Framework启动一个执行汇编程序的新进程,然后使用System.IO打开汇编程序生成的文件以提取字节流

然而,即使您做了所有这些,如果您没有遇到安全问题,我也会非常惊讶。随着每个新操作系统的出现,将可执行代码注入到完全不同的进程中的可能性越来越小。有了Vista,我相信你肯定会被拒绝。即使在XP中,我认为在尝试写入另一个进程的内存时,也会出现访问被拒绝的异常


当然,这提出了一个问题,为什么你需要这样做。肯定有更好的方法:)。

作为我在一个个人项目上做的早期原型设计的一部分,我写了很多代码来做类似的事情。它不接受字符串——x86操作码是X86Writer类上的方法。它根本没有文档记录,也远没有完整的覆盖范围,但如果它感兴趣,我愿意在新的BSD许可下对它进行开源

更新:
好的,我已经创建了这个项目--

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


这与传入字符串并返回字节数组并不完全相同。要做到这一点,您需要一个x86汇编器组件,或者masm.exe的包装器。

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

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

查看Microsoft Research。

查看此项目:

此项目封装了FASM汇编器,它是以汇编语言编写的,并被编译成微软COOF对象,由C++项目包住,然后再封装在C中。这可以完全满足您的需要:给定一个x86/x64程序集字符串,这将生成所需的字节

如果需要相反的方式,Udis86反汇编程序有一个端口,完全移植到C#,如下所示:


这将把字节数组转换成x86/x64的指令字符串

我本应该更清楚-我将编辑我的问题以更清楚,您将看到为什么这不是我想要的。=)不过谢谢你。啊,我现在明白了。你为什么不直接用汇编编译器编译代码呢?我对允许部署的行李有一些要求——特别是我需要将所有东西都保存在一个可执行文件中。也许他这么做是为了看看自己是否可以。不,不是病毒=在Vista和XP中,我可以使用WriteProcessMemory API将内存注入进程。如果你是以管理员的身份运行的话,它相对简单。至于我为什么需要它,我真的没有权利说,但我可以保证它不是为了任何邪恶的目的。=)是的,使用官方API并成为管理员会有所帮助,我想:)。另一个进程是非托管进程吗?是的,它是非托管进程。我肯定对此感兴趣-我也很乐意参与。如果你决定这么做,给我发一条短信——gmail.com上的erikforbes——我们会合作的好的,我需要一个x86汇编组件。这当然很有趣,但不是我想要的-它们从IL->x86转换而来。谢谢你的链接!=)有趣的东西——不过,对我来说可能有些过分了。谢谢-+1=)我不再做这个项目了,但这太不可思议了。谢谢