我在試圖看看如何使用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