gpt4 book ai didi

c# - MSIL - 调用操作码如何知道只给定一个整数调用什么方法

转载 作者:行者123 更新时间:2023-11-30 12:42:53 27 4
gpt4 key购买 nike

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

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

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

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

谁决定了这个值(value)?当您使用 ildasm 进行反汇编时,它会很好地打印名称,但它是否有查找的表格?

这个表是在哪里定义的?

最佳答案

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

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

关于c# - MSIL - 调用操作码如何知道只给定一个整数调用什么方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32466360/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com