繁体   English   中英

C#(MSIL)转换为原生X86代码?

[英]C# (MSIL) into native X86 code?

我首先要说的是我的目标是将MSIL转换为本机X86代码。 我的程序集仍然需要安装.net框架,我很好。 NGEN不是我想要的,因为你仍然需要原装配件。

我遇到了ilasm ,我想知道这就是我想要的,这会产生纯粹的汇编代码吗?

我看过其他项目,比如mono(它不支持我的应用程序使用的一些关键功能)和.net链接器,但它们很简单,只需用.net框架创建一个EXE,这不是我想要的。

到目前为止,任何研究都已提出......你做不到。 我真的不确定为什么JIT在加载MSIL程序集时会这样做。 我有自己的理由想要这个,所以我想我的问题归结为此。

  1. 我发布的链接是否有用?

  2. 有什么可以将MSIL变成x86程序集吗?

有各种第三方代码保护包可用于隐藏IL,并通过一个特殊的引导加载程序将其打包,该引导加载程序仅在运行时解包。 如果您担心代码的反汇编,这可能是一个选项,尽管大多数这些第三方软件包也已经破解(遗憾的是,有些不可避免。)简单的混淆最终可能同样有效,假设这是您的基本目标。

与“预先评估”IL相关的主要挑战之一是您最终在本机代码中包含固定地址引用。 当加载本机代码以在CLR下执行时,这些又需要“重新基础”。 这意味着您需要的不仅仅是编译的逻辑; 您还需要在加载代码时重新定义固定引用所需的所有引用上下文信息。 它不仅仅是缓存代码。

与大多数事情一样,第一个问题应该是为什么而不是如何。 我假设你有一个特定的目标,如果你想自己生成本机代码(同样,为什么x86?为什么不是x64呢?)。 这是JIT编译器的工作 - 仅在需要时在特定平台上编译优化指令集,并在以后执行。

我可以推荐尝试理解CLR如何工作以及JIT如何工作的最佳来源是查看SSCLI - 基于ECMA-335规范的CLR实现。

你考虑过不使用C#吗? 鉴于C#编译器的输出是MSIL,如果不是你想要的话,在不同的平台上开发是有意义的。

或者,听起来NGEN会执行您想要的操作,它只是不处理将整个事物放入可执行文件中。 您可以分析生成的NGEN图像,以确定需要完成哪些操作(请注意,根据文档,NGENed图像是PE文件)

以下是NGEN的链接,其中包含有关图像存储位置的信息: C:\\windows\\assembly\\NativeImages_CLR_Bit ,例如C:\\windows\\assembly\\NativeImages_v2.0.50727_86 请注意,.NET 3.0和3.5都是2.0的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM