MSIL - 如果给出一个整数

时间:2015-09-08 20:06:14

标签: c# clr cil

我试图弄清楚MSIL如何通过仅存储一个整数来表示对静态函数的调用。

例如,如果您添加对Interlocked.Increment(ref someVariable)的调用,您的IL将包含以下内容:

0x28 | 0x12,0x0,0x0,0xA

管道运算符是我的补充,基本上0x28是调用指令,012,0x0,0x0,0xA是“Interlocked.Increment”方法。

谁决定这个价值?当您使用ildasm进行反汇编时,它会打印出名称,但它是否有一个查找的表?

此表定义在哪里?

1 个答案:

答案 0 :(得分:1)

根据ECMA-335,0x0A000012是元数据令牌。元数据令牌基本上是唯一标识本地模块中的类型,方法,字段等的数字。 0x0A表示模块中的 MemberRef 表,0x12是表中方法的索引。

该表包含方法的名称和签名(如其参数和返回类型)。