【问题标题】:Can a LocalVarSig have multiple constraint attributes?LocalVarSig 可以有多个约束属性吗?
【发布时间】:2018-09-26 17:33:44
【问题描述】:

在 LocalVarSig 语法图中,CustomMod 和 Constraint 元素处于循环中,因此这意味着可以有多个 Constraint 元素。如果有多个 Constraint 元素,它的语义是什么?谢谢!

【问题讨论】:

    标签: cil ilasm


    【解决方案1】:

    来自 ECMA-335 §II.23.2.9,添加了重点:

    签名中的约束项目前只有一个可能 ,ELEMENT_TYPE_PINNED (§II.23.1.16),它指定 目标类型固定在运行时堆中,不会被移动 垃圾回收的动作。

    约束只能在 LocalVarSig 中应用(而不是 场签名)。

    所以pinned 是唯一可能的约束值,至少在当前版本的 CIL 中是这样。

    那么,pinned 的多个实例是否有效?看起来是这样。汇编器 (ILasm) 接受一个局部变量的多个实例:

    .locals init (int32& pinned pinned pinned x)
    

    如果我组装它然后反汇编它(ILdasm),生成的 IL 将保留重复的 pinned 关键字。使用MdDumper 查看程序集还会显示StandAloneSig 表中重复的0x45 字节。

    我没有看到多个pinned 约束的任何验证差异,所以我认为它们是多余的,相当于只有一个pinned

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多