方法的最后一条指令可能有哪些OpCode?

时间:2012-07-28 04:26:09

标签: c# .net cil il opcode

在.net中,可以作为方法的最后一条指令存在的OpCode是什么。

目前我知道它可以

但它有可能成为其他任何操作码吗?如果是这样,什么代码(更喜欢c#)会产生它们?

“Last”是指“方法体中定义的最终OpCode”

1 个答案:

答案 0 :(得分:2)

如果throw可能是方法中的最后一个操作码,则jmp也可能符合条件。

另外,如果我们考虑一个退出条件不在最后的递归方法,最后一个操作码可能calltail.call而不是a ret

更新:嗯,不,它不会。正如Marc Gravell在评论中正确指出的那样,tail.call的文档说:

  

除了要传输的参数外,堆栈必须为空   以下电话。调用指令后的指令   必须是ret

更新2:无条件分支操作码如brbr.s也可能是方法的最后一条指令,如果它的出口点更早出现(再次感谢Marc)。