如何将本机回溯转换为与addr2line工具一起使用



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(

  1. 获取库基本地址:

0xac0ad000<-Module.findBaseAddress("libc.so"(

  1. 获取回溯

Thread.backtrace(thz.context,Backtracer.ACCURATE(.map(DebugSymbol.fromAddress(.join("\n"(;

样本输出:

0xac151ed7 libc.so!打开64+0x2e

3.Substract baseAddr获取PC值

#pc 0x000a4ed7<-0xac151ed7-0xac0ad000

  1. 将2行与PC值相加

$addr2line-f-C-i-esymbols/apex/com.android.runtime/lib/bionic/libc.so 0x000a4ed7
open

最新更新