如何使用 .net cil jmp 操作码

Wil*_*son 3 .net c# cil

我正在尝试让 jmp 操作码在 Cil 中工作

jmp  void ILTest.Program::MyFunc2(int32)
Run Code Online (Sandbox Code Playgroud)

ilasm 很好,但是当我运行程序时,我总是收到“公共语言运行时检测到无效程序”异常。

我知道这是无法验证的代码,所以我试图授予权限

SecurityPermission perm = new SecurityPermission(SecurityPermissionFlag.Execution | SecurityPermissionFlag.SkipVerification | SecurityPermissionFlag.UnmanagedCode);

但它似乎没有任何效果。

有没有人有一个使用'jmp'的程序工作?

Jul*_*ain 5

jmp只能跳转到与当前方法具有相同参数的方法。确保您已经在一个将 anint32作为参数的方法中,并且您没有任何东西压入堆栈:它必须是空的。还要确保您不在try/catch/filter/finally街区中。

如果您不能满足这些条件,请改用 a call

  • @WilliamPearson 你是什么意思,“没有机会解开堆栈”?你可以再详细一点吗? (2认同)