使用Mono.Cecil对C++/CLI可执行文件的往返支持

本文关键字:可执行文件 支持 CLI Mono Cecil C++ 使用 | 更新日期: 2023-09-27 17:58:46

Mono.ecil目前不支持混合模式程序集,即使它可以读取此类程序集的.NET部分,也不会将此类程序集写回磁盘。支持混合模式程序集的读写往返需要什么?(不对x86/x64程序集进行任何更改)

请注意,我只需要使用.NET元数据和CIL,而不需要实际的x86/x64程序集本身。我只需要在混合模式程序集中修改一些.NET类,因此,我需要使用Cecil将其加载到对象中,进行更改,然后将其保存回,而不修改x86/x64程序集代码。

我假设x86/x64程序集将存储在一个块中,在解析过程中可以简单地将其读取到字节数组中,并在保存程序集时输出回生成的EXE。这么简单吗?

来自常见问题解答:

Cecil可以读取混合模式程序集,但不支持写入混合模式程序集中

使用Mono.Cecil对C++/CLI可执行文件的往返支持

Mono.Cecil不支持编写混合模式程序集。

还有另一个库dnlib。API与相似,但并不相同,因此它不是一个直接替代品。

来自项目的README.md

创建dnlib是因为de4dot需要一个健壮的.NET程序集库,该库可以处理所有类型的模糊程序集。de4dot曾经使用Mono.Cecil,但由于Mono.Ce西尔不能处理模糊的程序集,不完全支持混合模式程序集,不能像CLR那样读取.NET程序集,以及许多其他缺失的功能。API是类似的,因为它使得将de4dot移植到dnlib更加容易。

GitHub存储库位于此处:https://github.com/0xd4d/dnlib