在 LocalVarSig 语法图中,CustomMod 和 Constraint 元素处于循环中,因此这意味着可以有多个 Constraint 元素。如果有多个 Constraint 元素,它的语义是什么?谢谢!
问问题
64 次
1 回答
1
从 ECMA-335 §II.23.2.9 开始,强调添加:
Signatures 中的 Constraint 项目前只有一个可能的 值ELEMENT_TYPE_PINNED (§II.23.1.16),它指定目标类型被固定在运行时堆中,并且不会被垃圾回收的动作移动。
约束只能在 LocalVarSig(而不是 FieldSig)中应用。
唯一可能的约束值也是如此pinned
,至少在当前版本的 CIL 中是这样。
那么,多个实例是否pinned
有效?看起来是这样。汇编器 (ILasm) 接受一个局部变量的多个实例:
.locals init (int32& pinned pinned pinned x)
如果我组装它然后反汇编它(ILdasm),生成的 IL 将保留重复的pinned
关键字。使用MdDumper 查看程序集还会显示表中的重复0x45
字节StandAloneSig
。
我没有看到任何具有多个pinned
约束的验证差异,所以我认为它们是多余的,相当于只有一个pinned
.
于 2018-09-27T01:24:05.077 回答