c# – MSIL – 如果给出一个整数,调用操作码如何知道调用什么方
发布时间:2020-12-15 22:20:06 所属栏目:百科 来源:网络整理
导读:我试图弄清楚MSIL如何通过仅存储整数来表示对静态函数的调用. 例如,如果添加对Interlocked.Increment(ref someVariable)的调用,则IL将包含以下内容: 0x28 | 0x12,0x0,0xA 管道运算符是我的补充,基本上0x28是调用指令,012,0×0,0xA是“Interlocked.Increment
我试图弄清楚MSIL如何通过仅存储整数来表示对静态函数的调用.
例如,如果添加对Interlocked.Increment(ref someVariable)的调用,则IL将包含以下内容: 0x28 | 0x12,0x0,0xA 管道运算符是我的补充,基本上0x28是调用指令,012,0×0,0xA是“Interlocked.Increment”方法. 谁决定了这个价值?当您使用ildasm进行反汇编时,它会打印出名称,但是它有一个查找的表吗? 这个表定义在哪里? 解决方法
根据ECMA-335,0x0A000012是元数据令牌.元数据令牌基本上是唯一标识本地模块中的类型,方法,字段等的数字. 0x0A表示模块中的MemberRef表,0x12表示表中方法的索引.
该表包含方法的名称和签名(如其参数和返回类型). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |