某些.NET反射方法(例如,Module.ResolveField)接受所谓的标记作为参数。这些令牌只是Int32号码。我在反汇编程序中只看到了正数令牌,但一般来说,整数也可以是负数或零。假设CLR令牌只是正面是否安全?
答案 0 :(得分:5)
他们实际上是指无符号数字。来自MS Partition II,第22节(摘自this page):
元数据项(元数据表中的记录)由元数据标记处理。未编码的元数据令牌是4字节无符号整数,其中包含最高有效字节中的元数据表索引和三个最低有效字节中的基于1的记录索引
鉴于没有元数据表索引的最高位设置,在将unsigned
int转换为int
时,不会产生溢出或负数。