hot patch/hotfix
概念
热修复/热补丁指无需重启程序的情况下对其进行更新。
可参考方案
- AndFix 直接在native层进行方法的结构体信息对换,从而实现放方法新旧替换,从而实现hotfix功能。
- dexposed 基于xposed框架实现的安卓平台上的无侵入式运行时AOP框架,支持函数级别的在线热更新。
-
WaxPatch 通过Lua语言编写的iOS框架,使用 OC runtime 特性调用替换应用程序内部由 OC 编写的类方法,达到HotFix的目的。
- JSPatch 在项目中引入JSPatch引擎,实现用JavaScript语言调用Objective-C的原生接口,获得脚本语言的能力:动态更新iOS APP,替换项目原生代码。
- kpatch 在linux系统中针对于内核的hotfix方案。
以往课题
OSH-2018/X-yeahtiger
实现思路
- 控制 main 进程进入修复代码片段
- 在修复代码片段中获得全局变量、函数的引用信息和新旧函数的地址
- 将旧函数入口处替换为对新函数的跳转
- 恢复现场,完成热替换
可优化的点
- 原方案获取全局变量等信息时效率过低,可采用内核态获取工作进程控制权,减少开销。
- 代码替换采用替换旧函数入口处代码为作为新函数跳转,效率较低。可在此方面进行优化
- 该方案的热修复只能处理无状态模块。可实现对有状态模块的热修复。