Android中的ART自修改代码

Android中的ART自修改代码,第1张

概述我正在尝试使用JNI在Android应用程序中实现自我修改代码.我的应用程序的MainActivity类具有以下方法:publicintmethodToModify(){return42;}这是此方法的字节码:const/16v0,0x2Areturnv0这就是在classes.dex文件中表示此方法的方式:13002A000F0

我正在尝试使用JNI在Android应用程序中实现自我修改的代码.

我的应用程序的MainActivity类具有以下方法:

public int methodToModify(){           return 42;}

这是此方法的字节码:

const/16 v0, 0x2Areturn v0

这就是在classes.dex文件中表示此方法的方式:

13 00 2A 00 0F 00

我的目标是在运行时中从本地代码更改methodToModify方法的返回值.因此,这是实现自修改代码的JNI方法的算法:

>读取进程内存(这是有关Understanding Linux /proc/id/maps的更多信息):

文件* fp;
 fp = fopen(“ / proc / self / maps”,“ r”);
>检测.dex文件(或在ART中为.oat文件)的开头和结尾的地址:

while(fgets(line,2048,fp)!= NulL){
    //搜索“ dex”或“燕麦”
    如果(strstr(line,“ .oat”)!= NulL || strstr(line,“ .dex”)!= NulL)
        //获取DEX文件区域的开始和结束地址
>在.dex或.oat文件中查找methodToModify的字节.
>使用mprotect功能来设置写入文件的权限.
>修改返回值方法.

我的问题是,这种方法完全可以在装有AndroID 4.2的Nexus 7上正常工作,但不能在装有AndroID 5.1的Nexus 5上工作.我可以使用Dalvik实施自我修改的代码,但使用ART无法做到这一点.

那么,是否可以使用ART实现自修改代码?

解决方法:

鉴于ART使用的是“时间提前编译”,https://source.android.com/devices/tech/dalvik/

我不确定您希望它如何工作,因为在运行时它已经在cpu体系结构代码中,而不是DEX字节码中.

此处有更多详细信息:https://source.android.com/devices/tech/dalvik/configure.html

ART运行时上的Google IO 2014视频:
https://youtu.be/EBlTzQsUoOw

总结

以上是内存溢出为你收集整理的Android中的ART自修改代码全部内容,希望文章能够帮你解决Android中的ART自修改代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1089622.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存