加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

腾讯正式开源面向 Unity 项目的 Bug 修复神器 InjectFix

发布时间:2019-09-13 03:15:34 所属栏目:建站 来源:局长
导读:副标题#e# InjectFix是腾讯最新对外开源的Unity代码逻辑热修复方案,可实现在Unity线上客户端内,不用迭代新版本,就能快速修复游戏的线上bug。 先说几个亮点: 直接在Unity工程上修改C#即可更新;老项目无需修改原有代码即可使用; 更符合苹果热更新条款;

argumentBase指向的是求值栈该函数的栈帧,栈帧是这么安排的:

腾讯正式开源面向 Unity 项目的 Bug 修复神器 InjectFix

先放参数(如果有的话),再放本地变量(如果有的话),接着是临时区域,当函数返回时弹掉所有东西,如果有返回值就放到栈顶(函数执行前参数0的位置)。

用如下一个静态方法来演示下虚拟机怎么运行:

  1. public static float Add(float a, float b) 
  2.     return a - b; 

这函数编译后是这四条指令

腾讯正式开源面向 Unity 项目的 Bug 修复神器 InjectFix

Add函数的执行过程

  1. 指令1把参数0 Push到栈顶;
  2. 指令2把参数1 Push到栈顶;
  3. 指令3把两个栈顶元素弹出(Pop)并相加,结果Push到栈顶;
  4. 指令4把栈顶拷贝到参数0的位置,清理栈,退出循环,Execute函数执行结束。

代码注入

上面的Add函数注入后是这样的

  1. public static float Add(float a, float b) 
  2.     if (WrappersManagerImpl.IsPatched(92)) 
  3.     { 
  4.         return WrappersManagerImpl.GetPatch(92).__Gen_Wrap_25(a, b); 
  5.     } 
  6.     return a - b; 

比较简单,发现这函数有patch的话,就重定向到虚拟机。

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读