gpt4 book ai didi

c# - 如何在 Mono.Cecil 中创建 Ldarg_S 指令?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:15 25 4
gpt4 key购买 nike

在Mono.Cecil中,使用Ldarg_S创建指令时,直接的做法是:

Instruction.Create(OpCodes.Ldarg_S, 4);

不起作用,因为 Mono.Cecil expects操作数类型为OperandType.InlineI,而OpCodes.Ldarg_S的操作数类型为ShortInlineArg。相反,我需要使用 Create (OpCode opcode, ParameterDefinition parameter) : Instruction过载。

这需要初始化 ParameterDefinition,而后者又需要以下参数:

  • 字符串名称
  • ParameterAttributes 属性
  • TypeReference 参数类型

那些东西是什么?如何指定我只需要第四个(或第五个或第六个)参数?

最佳答案

深入研究Mono.Cecil的源代码后,似乎没有办法产生像ldarg.s 4这样简单的指令。

相反,Mono.Cecil 所做的是它需要您指定 ParameterDefinition,然后将其与方法的参数列表匹配以找到实际索引。

最简单的方法是使用MethodDefinition.Parameters 属性通过索引检索相应的参数并将其传递给Instruction.Create。可能,这种方法的目标是通过指定给定参数并让 Mono.Cecil 确定实际索引,使调用者更安全地管理参数。确实,调用者确定实际索引可能有点棘手,尤其是在 ldarg.0 引用 this 而不是实际的第一个参数。

关于c# - 如何在 Mono.Cecil 中创建 Ldarg_S 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32989681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com