目录
第一行: IL_0000: /* 19 | */ ldc.i4.3
第二行: IL_0001: /* 0A | */ stloc.0
第四行:_0003: /* 8C | (01)00000F */ box [System.Runtime]System.Int32
第七行 IL_000a: /* A5 | (01)00000F */ unbox.any [System.Runtime]System.Int32
第八行: IL_000f: /* 0C | */ stloc.2
该文章尝试把cs(C#语言)文件反编译成.Net的IL(通用中间语言)文件以观察拆箱和装箱的过程在IL文件中是怎么发生的。
灵感来源于观看了大佬的博客,于是模仿大佬的操作自己尝试下。下面是CREDIT。
原文连接:Six Important .NET Concepts: Stack, Heap, Value Types, Reference Types, Boxing, and Unboxing - CodeProject(大佬的图片和文章都比这篇博文精彩,推荐去看下。)
关于CIL部分参考的博客:
Understanding Common Intermediate Language (CIL) - CodeProject
然后关于后续用到的把dll文件反编译成IL文件是参考下面这篇博客。
如何使用ILAsm與ILDasm修改.Net exe(dll)文件_ZenDei技術網路在線
编写cs文件
该程序做了三步操作,
1.把整数3赋值给变量X。
2.把变量X传递给一个Object类“O”。
3.再把O传递给变量Y。
在命令行输入dotnet build,或者直接代码,即可得到dll文件与exe文件。
反编译成IL文件
- 打开Visual Studio 2022 Developer Command Prompt(这个下载了VS就会自动装上)。
- 输入“ILDSM”打开反编译的软件。
- 文件--打开--选择dll/exe文件--转储--默认选项下点确定
-
得到IL文件
分析IL文件
终于找到了CIL(Common Intermediate Language