C# 的字节码格式是什么?



我试图将IL拆卸器与我的disassmbler应用程序(Android-disassembler)相互互动,但是我找不到一些ciL拆卸的库。因此,我正在尝试为CIL开发一个简单的拆卸器。因此,我通过Internet搜索(堆栈溢出,Google,Wikipedia等)。但是我找不到CIL组装代码如何变成字节。

我在二进制编辑器中打开了C#应用程序(预测我可以找到人类可读的IL源代码),但我只能在其中找到一些二进制文件。

c#bytecode看起来如何?

例如。X86指令字节具有可变长度:

NOP = 0x90,
JMP = 0xEB 0xxx 0xxx 0xxx 0xxx, ...

到目前为止,我只能找到每个说明的opcodes(https://en.wikipedia.org/wiki/list_of_cil_cil_instructions)。但是我想知道操作数也适用于opcodes。

(类似于mov88 /r,不仅是88。)

我可以推荐这本书:

Expert .NET 2.0 IL汇编器由Serge lidin

https://www.amazon.com/expert-net-sembler-serge-lidin/dp/1590596463

ilspy 是一个非常流行的开源分解器:>

https://github.com/icsharpcode/ilspy

在该源代码中环顾四周可能为您提供启发。

看来 ILDASM (Visual Studio随附的MSIL拆卸器)是开源的:

https://github.com/dotnet/coreclr/tree/master/src/ildasm

希望其中一些可以帮助您。

最新更新