env和env.handle
这两个在一定程度上可以通用,或者可以说会完成自动转换,使用Frida封装的JNI相关API,必须使用env
,当参数需要JNIEnv*
时,可以使用env
和env.handle
1 2 3
| var env = Java.vm.tryGetEnv(); // handle可以理解为env的内存地址 env.handle;
|
打印so层函数栈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var soAddr = Module.findBaseAddress("libxiaojianbang.so"); var updateAddr = soAddr.add(0x21B0); Interceptor.attach(updateAddr, { onEnter: function (args) { console.log("=================================================="); console.log(soAddr); console.log(Thread.backtrace(this.context, Backtracer.ACCURATE).map(function (value) { var symbol = DebugSymbol.fromAddress(value); console.log(symbol.moduleName); if(symbol.moduleName === "libxiaojianbang.so") { return symbol + " offset: " + value.sub(soAddr); } return symbol; }).join('\n')); }, onLeave: function (retval) { } });
|
注意打印出的函数地址是实际执行的汇编代码的下一行指令的地址