使用 Addr2line 將函式位址解析為函式名

2021-07-27 07:22:45 字數 1068 閱讀 7938

用 addr2line 將函式位址解析為函式名

addr2line 工具(它是標準的 gnu binutils 中的一部分)是乙個可以將指令的位址和可執行映像轉換成檔名、函式名和源**行數的工具。這種功能對於將跟蹤位址轉換成更有意義的內容來說簡直是太棒了。

要了解這個過程是怎樣工作的,我們可以試驗乙個簡單的互動式的例子。(我直接從 shell 中進行操作,因為這是最簡單地展示這個過程的方法,如清單 4 所示。)這個示例 c 檔案(test.c)是通過cat乙個簡單的應用程式實現的(也就是說,將標準輸出的文字重定向到乙個檔案中)。然後使用 gcc 來編譯這個檔案,它會傳遞一些特殊的選項。首先,要(使用-wl選項)通知鏈結器生成乙個映像檔案,並(使用-g選項)通知編譯器生成除錯符號。最終生成可執行檔案 test。得到新的可執行應用程式之後,您就可以使用grep工具在映像檔案中查詢main來尋找它的位址了。使用這個位址和 addr2line 工具,就可以判斷出函式名(main)、原始檔(/home/mtj/test/test.c)以及它在原始檔中的行號(4)。

在呼叫 addr2line 工具時,要使用-e選項來指定可執行映像是test。通過使用-f選項,可以告訴工具輸出函式名。

$ cat >> test.c

#include int main()

$gcc -wl,-map=test.map -g -o test test.c$ grep main test.map

0x08048258 __libc_start_main@@glibc_2.0

0x08048258 main

$addr2line 0x08048258 -e test -fmain

/home/mtj/test/test.c:4

$

使用 Addr2line 將函式位址解析為函式名

用 addr2line 將函式位址解析為函式名 addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。這種功能對於將跟蹤位址轉換成更有意義的內容來說簡直是太棒了。要了解這個過程是怎樣工作的,我們可以試驗乙個簡...

用 Addr2line 將函式位址解析為函式名

addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。在可執行程式中都包含有除錯資訊,其中很重要的乙份資料就是程式源程式的行號和編譯後的機器 之間的對應關係line number table。dwarf格式的...

用 Addr2line 將函式位址解析為函式名

addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。這種功能對於將跟蹤位址轉換成更有意義的內容來說簡直是太棒了。要了解這個過程是怎樣工作的,我們可以試驗乙個簡單的互動式的例子。我直接從 shell 中進行操...