关于AndFix 在dalvik虚拟机热修复 CLASS_ISPREVERIFIED 疑问

孤独灬啸月 2018-04-25 12:09:14
我模仿 AndFix 的原理卸了一个 demo,C 部分一致。在代码中A类调用B类的一个方法。修改B类,然后单独打包成一个 dex。原Apk 中有一个按钮加载 dex,并进行方法的替换。

在 dalvik_replaceMethod 方法的最开头,获取到修正后的方法的ClassObject,然后把他的标志位置为 CLASS_INITIALIZED。但是我发现我这个去掉也是可以进行正常运行的。

按我的理解是:最终是把原先错误的方法里面的属性指针指向了修复后方法下的实现,最终使用的还是原先错误的那个方法,
只是他的一些具体实现变了。

那么,对于错误来说,他所在类 ClassObject 的 status 应该在类加载的时候已经被标志位 CLASS_INITIALIZED。我们只是引用了修复后方法里面的内容,并 没有整个引用他,那么修复后方法的 ClassObject 的标志位应该是不需要的吧。

我在自己写的实现中,去掉这一小段代码,发现在模拟器下
是可以正常加载修复方法。

没有出现网上说的 CLASS_ISPREVERIFIED 问题。或者我没考虑到这块的作用。

AndFix 的坐着原话是说:loadclass并没初始化啊,设置类的状态目的是为了跳过verify。
...全文
605 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧