定制ART跟踪JNI函数绑定

   JNI函数的绑定:每一个JAVA层函数在native层都对应一个ArtMethod对象,JNI函数在执行前必须完成JNI函数所在类的加载和初始化、以及该JNI函数的ArtMethod对象当中属性和So中具体函数地址的绑定。

JNI函数绑定的分类:

1、静态:

两次绑定,第一次是在类加载的时候,会绑定到Art中的“桥函数”;第二次绑定是在该Jni函数第一次被真正调用时候,由Art完后该JNI函数在So中地址的查询以及绑定。

art_jni_dlsym_looup_stub_(汇编实现)->artFindNativeMethod->FindCodeForNativeMethod(method) 

2、动态:

两次绑定,不同于静态的两次在于由开发人员编写代码主动进行绑定,而不是由art帮助完成绑定。

不管静态或者动态注册,最后都会到达:const void* ArtMethod::RegisterNative函数中的SetEntryPointFromJni(new_native_method)函数

function hookJniRegister() {
var Regiseteraddr = Module.findExportByName("libart.so","_ZN3art9ArtNethod14RegisterNativeEPKvb");
Interceptor.attach(Regiseteraddr, {
    onEnter: function (args) {
    console. log("go into RegisterNative" );
    var artmethodptr = args[0];
    var dex_method_index_ = Memory.readU32(ptr(artmethodptr).add(12));
    var funcaddr = args[1];
    console.log ("RegisterNative :" + dex_method_index_ + " - -funcaddr:" + funcaddr);},             
    onLeave: function (retval){
}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值