linux c 自修改代码,Android中的ART自修改代码

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

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

public int methodToModify()

{

return 42;

}

这是此方法的字节码:

const/16 v0, 0x2A

return v0

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

13 00 2A 00 0F 00

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

文件* 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实现自修改代码?

解决方法:

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

标签:self-modifying,android-ndk,c-3,android,android-runtime

来源: https://codeday.me/bug/20191028/1950276.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值