什么是mdToken,它与MethodTable的区别?

时间:2011-08-23 09:26:52

标签: debugging clr windbg sos

与标题中一样,它是什么以及它与MethodTable有何不同?

1 个答案:

答案 0 :(得分:3)

mdToken是元数据标记,或者或多或少是元数据表中的行标识(int的一部分标识它所属的表,另一部分标识该表中的行)。

有两种类型的令牌 - 内部和外部。

内部令牌小于外部令牌,仅使用4个字节:行ID为3个字节,表id为1个字节。 (我不确定这些尺寸是否已经改变了x64,但你明白了) 示例:Method表中第一行(基于零)的0x06000000。

外部令牌(或编码令牌)更大,适用于一系列表格,而不是特定的表格。有几种不同的编码令牌类型,它们具有已知的模式,您必须了解它们才能理解它们的编码值。例如,HasCustomAttribute标记可以是19个元数据表中任何一个的标记(因为属性可以附加到代码的许多不同部分)。编码标记的一部分是表的id,也称为标记(但用于保持该部分的位宽与每个不同 - 因此是已知的模式),剩下的部分留给行id。外部令牌的大小可以变化 - 这有助于在行数较小时保持较小的尺寸。