【发布时间】:2014-06-01 11:58:28
【问题描述】:
作为一名安卓游戏开发者,我使用 MethodBody.GetILAsByteArray 方法来获取 IL 代码,以检测给定方法是否已被用户使用其他应用程序(例如作弊引擎)修改(注入)。例如,
class A
{
public foo()
{
// do something here.
}
public static byte[] GetILByteCode() {
return typeof(A).GetMethodInfo("foo").GetMethodBody().GetILAsByteArray();
}
}
如果在函数“foo”被注入后调用函数 A.GetILByteCode(),我可以获得函数“foo”的注入版本。
如果我先调用 A.GetILByteCode(),然后在“foo”中注入一些代码。当我再次调用 A.GetILByteCode() 时,它将返回函数“foo”的原始版本,而不是注入的版本。
GetILAsByteArray() 的结果好像被缓存了。
所以我的问题是,我们能否清除GetILAsByteArray()的缓存,获取目标方法的最新IL代码?
【问题讨论】:
标签: c# android mono unity3d il