frida - 如何翻译本机回溯以与 addr2line 工具一起使用
frida - How to translate native backtrace to use with addr2line tool
Frida 可以使用以下代码打印回溯:
var backtrace = Thread.backtrace(this.context, Backtracer.ACCURATE)
.map(DebugSymbol.fromAddress)
.join("\n\t");
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!fopen64+0x2e
3.Substract baseAddr 获取PC值
#pc 0x000a4ed7 <- 0xac151ed7 - 0xac0ad000
- 具有 PC 值的地址 2 行
$ addr2line -f -C -i -e
symbols/apex/com.android.runtime/lib/bionic/libc.so 0x000a4ed7
open(char const*, int pass_object_size1, unsigned short)
bionic/libc/include/bits/fortify/fcntl.h:74 fopen
bionic/libc/stdio/stdio.cpp:256
Frida 可以使用以下代码打印回溯:
var backtrace = Thread.backtrace(this.context, Backtracer.ACCURATE)
.map(DebugSymbol.fromAddress)
.join("\n\t");
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!fopen64+0x2e
3.Substract baseAddr 获取PC值
#pc 0x000a4ed7 <- 0xac151ed7 - 0xac0ad000
- 具有 PC 值的地址 2 行
$ addr2line -f -C -i -e symbols/apex/com.android.runtime/lib/bionic/libc.so 0x000a4ed7
open(char const*, int pass_object_size1, unsigned short)
bionic/libc/include/bits/fortify/fcntl.h:74 fopen
bionic/libc/stdio/stdio.cpp:256