我在试图看看如何使用jmp
操作码,到目前为止我还没有设法调用通用方法。对于我的测试,我有一个方法返回它的参数,另一个方法的主体只是jmp
操作码跳转到第一个方法。我的问题是,当我跳转到非泛型方法时(例如jmp int32 Program::Id2(int32)
带有以下用于Id2的签名:static int Id2(int x)
),则在运行时没有错误,而如果我为泛型方法执行此操作(例如jmp !!0 Program::Id<int32>(!!0)
具有以下Id: static T Id<T>(T x)
)我得到一个“公共语言运行时检测到一个无效的程序”异常。造成这个问题的原因是什么?.Net CIL jmp操作码和通用方法
P.S. :这里’ s a gist与CIL我用于我的测试。注释跳转到Id2
的行并取消注释IdInt
中跳转到Id
的行使其在运行时出现上述异常时失败。制作IdInt
和Id2
返回参考类型,如StringBuilder
doesn ’ t使其失败。
你能发布一个可编译的例子吗? – thehennyy
@thehennyy好点,我在测试IL中添加了一个要点。 – arjanen
你有没有试过在你的代码上运行peverify? – svick