我试图阅读MemberRef
编码索引(MemberRefParent
),在我这样做之前,我需要知道它的大小,根据 ECMA-335第II.24.2.6节,如果我理解正确,编码索引的计算如下:
我的伪代码
m=max_rows(t0..tn-1); //returns the number of rows of the table that has the most rows.
if(m<2^(16-log(n)){
//size is 2
} else {
//size is 4
}
当我在CLI文件上测试代码时,我遇到了错误,我一定错过了什么,希望有人能帮我找到我错的地方。
来自第II.24.2.6节,ECMA-335
如果e是一个编码索引,指向n中的表ti 表t0,... tn-1,然后将其存储为e&lt;&lt; (log n)| tag {t0,... tn-1} [ ti]如果表t0,... tn-1的最大行数,则使用2个字节, 小于2 ^(16 - (log n)),否则使用4个字节。
-
MemberRefParent:3位用于编码标签Tag
TypeDef 0
TypeRef 1
ModuleRef 2
MethodDef 3
TypeSpec 4