前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET9 十六进制转IL

.NET9 十六进制转IL

作者头像
江湖评谈
发布2024-03-25 14:29:43
840
发布2024-03-25 14:29:43
举报
文章被收录于专栏:天下风云天下风云

前言

.NET9里面,一串十六进制的代码,如下:

代码语言:javascript
复制
0x0,0x28,0xe,0x0,0x0,0xa,0x0,0x2a

你会知道它表示的是什么吗?答案是以下C#代码,也即是启动完整代的垃圾回收。

代码语言:javascript
复制
C#代码:
GC.Collect();

十六进制在内存里面分解成二进制,传送到CPU上执行。C#源码则被Roslyn Compile成MSIL。MSIL在内存里面即是十六进制,被JIT导入之后才会进行ASM Compile。一些细节可以参考:罕见的技术:MSIL的机器码简析

解析

拆解下以上十六进制

代码语言:javascript
复制
0x0  //表示空指令
0x28 0xe 0x0 0x0 0xa //表示call指令调用Collect函数
0x0 //空指令
0x2a //返回

继续看下,假如说调用

代码语言:javascript
复制
int a=5; 
int b=5; 
int c = a + b;

,它的MSIL十六进制如下:

代码语言:javascript
复制
0x0,0x1b,0xa,0x1b,0xb,0x6,0x7,0x58,0xc,0x2

再看:

代码语言:javascript
复制
static void Main(string[] args)
{ 
   Console.WriteLine("Call Main");
}

它的十六进制是:

代码语言:javascript
复制
0x0, 0x72, 0x01, 0x00, 0x00, 0x70, 0x28, 0x0d, 0x00, 0x00, 0x0a, 0x00, 0x2a  

工具

这种单个的十六进制,如果以人的思维来看,是非常晦涩的。所以它如果需要转换成完整的C#代码,可以借助一些工具来完成。你只需要输入十六进制数组,让工具给你进行解析即可。

Dnspy/ILSpy等等工具是可以反编译C#代码,但它的缺陷是对于十六进制转IL过于单薄。

所以这里可以借助非托管DaoChuRef.dll来完成。

代码语言:javascript
复制
  internal class Program
  {
      [DllImport("DaoChuRef.dll")]

      private extern static void dumpILRange(byte[] codeAddr, int codeSize);

      static void Main(string[] args)
      {
          /*
          例子1:
          十六进制:0x0, 0x72, 0x01, 0x00, 0x00, 0x70, 0x28, 0x0d, 0x00, 0x00, 0x0a, 0x00, 0x2a  
          C#代码:static void Main(string[] args){ Console.WriteLine("Call Main");}

          例子2:
          十六进制:0x0,0x1b,0xa,0x1b,0xb,0x6,0x7,0x58,0xc,0x2
          C#代码:int a=5; int b=5; int c = a + b;


          例子3:
          十六进制: 0x0,0x28,0xe,0x0,0x0,0xa,0x0,0x2a
          C#代码: GC.Collect();
           */

          byte[] bt = { 0x0, 0x28, 0xe, 0x0, 0x0, 0xa, 0x0, 0x2a };
          dumpILRange(bt, bt.Length);
          Console.ReadLine();
      }
  }

DaoChuRef.dll可在公众号后台回复:IL获取。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江湖评谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 解析
  • 工具
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档