7

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

目前我知道它可以

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

“最后一个”是指“方法体中定义的最终操作码”

4

1 回答 1

3

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

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

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

除了通过以下调用传输的参数外,堆栈必须为空。call 指令后面的指令必须是ret.

更新 2:无条件分支操作码类似于br并且br.s也可能是方法的最后一条指令,如果它的退出点发生得更早(再次感谢 Marc)。

于 2012-07-28T05:09:53.660 回答