微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – MSIL – 如果给出一个整数,调用操作码如何知道调用什么方法

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

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

0x28 | 0x12,0x0,0xA

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

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

这个表定义在哪里?

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐