如标题所示,它是什么以及它与 MethodTable 有何不同?
最佳答案
mdToken 是一个元数据标记,或者或多或少是元数据表中的行 ID(int 的一部分标识它所属的表,另一部分标识该表中的行)。
有两种类型的 token - 内部 token 和外部 token 。
内部 token 比外部 token 小,仅使用 4 个字节:3 个字节用于行 id,1 个字节用于表 id。 (我不确定 x64 的这些大小是否已更改,但您明白了) 示例:方法表中的第一行(从零开始)为 0x06000000。
外部标记(或编码标记)更大,并且适用于一系列表,而不是特定表。有几种不同的编码 token 类型,它们具有已知的模式,您必须了解这些模式才能理解它们的编码值。例如,HasCustomAttribute 标记可以是 19 个元数据表中任何一个的标记(因为属性可以附加到代码的许多不同部分)。编码 token 的一部分是表的 id,也称为标签(但用于保留这部分的位宽度因每个而不同 - 因此是已知的模式),其余部分留给行 id。外部标记的大小可能会有所不同 - 这有助于在行数较小时保持较小的大小。
关于debugging - 什么是 mdToken?它与 MethodTable 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7158836/