Frida可以打印出带有以下代码的回溯:
var backtrace = Thread.backtrace(this.context, Backtracer.ACCURATE)
.map(DebugSymbol.fromAddress)
.join("nt");
android中的输出如下所示:
0x72e82c2a50 libc.so!fopen64+0x50
0x72e82c2a4c libc.so!fopen64+0x4c
但当我尝试使用addr2line获取代码行时,它不起作用:
$ addr2line -f -C -i -e symbols/apex/com.android.runtime.release/lib64/bionic/libc.so 0x72e82c2a50
??
??:0
听起来这个地址并不是崩溃堆栈中的实际PC。如何翻译此地址以在addr2line工具中使用?
以下步骤(例如libc.so(
- 获取库基本地址:
0xac0ad000<-Module.findBaseAddress("libc.so"(
- 获取回溯
Thread.backtrace(thz.context,Backtracer.ACCURATE(.map(DebugSymbol.fromAddress(.join("\n"(;
样本输出:
0xac151ed7 libc.so!打开64+0x2e
3.Substract baseAddr获取PC值
#pc 0x000a4ed7<-0xac151ed7-0xac0ad000
- 将2行与PC值相加
$addr2line-f-C-i-esymbols/apex/com.android.runtime/lib/bionic/libc.so 0x000a4ed7
open