簡體   English   中英

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)

  1. 獲取庫基地址:

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

  1. 獲取回溯

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

示例輸出:

0xac151ed7 libc.so!fopen64+0x2e

3.減去baseAddr得到PC值

#pc 0x000a4ed7 <- 0xac151ed7 - 0xac0ad000

  1. 帶有 PC 值的 Addr2line

$ addr2line -f -C -i -e 符號/apex/com.android.runtime/lib/bionic/libc.so 0x000a4ed7
打開(字符常量*,int pass_object_size1,無符號短)
仿生/libc/include/bits/fortify/fcntl.h:74 fopen
仿生/libc/stdio/stdio.cpp:256

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM