frida-如何转换本机回溯以与addr2line工具一起使用

问题描述

Frida可以使用以下代码打印回溯记录:

var backtrace = Thread.backtrace(this.context,Backtracer.ACCURATE)
            .map(DebugSymbol.fromAddress)
            .join("\n\t");

输出如下所示:

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

  1. 获取回溯

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

示例输出:

0xac151ed7 libc.so!fopen64+0x2e

3.减去baseAddr得到PC值

#pc 0x000a4ed7

  1. Addr2line 与 PC 值

$ addr2line -f -C -i -e 符号/顶点/com.android.runtime/lib/bionic/libc.so 0x000a4ed7
open(char const*,int pass_object_size1,unsigned short)
仿生/libc/include/bits/fortify/fcntl.h:74 fopen
仿生/libc/stdio/stdio.cpp:256