1. 程式人生 > >linux除錯----addr2line將(轉換為地址及所在的檔案及行數)

linux除錯----addr2line將(轉換為地址及所在的檔案及行數)

Addr2line 工具(它是標準的 GNU Binutils 中的一部分)是一個可以將指令的地址和可執行映像轉換成檔名、函式名和原始碼行數的工具。這種功能對於將跟蹤地址轉換成更有意義的內容來說簡直是太棒了。
要了解這個過程是怎樣工作的,我們可以試驗一個簡單的互動式的例子。這個示例 C 檔案(main.c)是通過 cat 一個簡單的應用程式實現的(也就是說,將標準輸出的文字重定向到一個檔案中)。然後使用 gcc 來編譯這個檔案,它會傳遞一些特殊的選項。首先,要(使用 -Wl 選項)通知連結器生成一個映像檔案,並(使用 -g 選項)通知編譯器生成除錯符號。最終生成可執行檔案 test。得到新的可執行應用程式之後,您就可以使用grep 工具在映像檔案中查詢 main 來尋找它的地址了。使用這個地址和 Addr2line 工具,就可以判斷出函式名(main)、原始檔(/work/main.c)以及它在原始檔中的行號(4)。

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

[[email protected] work]# cat main.c
#include <stdio.h>


int main(void)
{
char *str = "hello";
str[0] = 'h';
return 0;
}

[[email protected] work]# gcc -Wl,-Map=main.map -g -o main main.c(編譯生成可執行檔案及main.map)
[[email protected]

work]# ls
1.txt  main  main.c  main.map

[[email protected] work]# grep main main.map
                0x00000000080482c4                [email protected]@GLIBC_2.0
                0x0000000008048394                main
OUTPUT(main elf32-i386)
[[email protected] work]# addr2line 0x0000000008048394 -e main -f
main
/work/main.c:4

相關推薦

linux除錯----addr2line(轉換地址所在的檔案

Addr2line 工具(它是標準的 GNU Binutils 中的一部分)是一個可以將指令的地址和可執行映像轉換成檔名、函式名和原始碼行數的工具。這種功能對於將跟蹤地址轉換成更有意義的內容來說簡直是太棒了。 要了解這個過程是怎樣工作的,我們可以試驗一個簡單的互動式的例子。

請問如何偏移量轉換地址

請問如何將偏移量轉換為地址?  我在使用軟體定位木馬特徵碼的時候,只得到偏移量,為什麼有的人用OD轉到偏移量,但我用OD的時候,顯示沒有這個偏移量的,請問如何將偏移量轉換為地址?    在DFCG回答過,再轉過來吧。+---------+---------+----

Python程式(.py)轉換Windows可執行檔案(.exe)

將Python程式(.py)轉換為Windows可執行檔案(.exe) python開發者向普通windows使用者分享程式,要給程式加圖形化的介面(EasyGUI 學習文件)(在前面的課程中目前只學習了最簡單的EasyGui,後面還會繼續學習 GUI的終極選擇:Tkinter,敬請期待),

用js從後臺得到的時間戳(毫秒轉換想要的日期格式

得到後臺從資料庫中拿到的資料我們希望格式是                   2016年10月25日 17時37分30秒 或者 2016/10/25 17:37:30 然而我們前臺得到的卻是一段數字(時間戳,毫秒數)                 1477386

使用Aspose.WordsWord文件轉換Tiff格式圖片檔案

用Aspose元件的優點是操作Word文件不需要安裝Office就可以實現。 首先需要引用Aspose.Words.dll,連結地址:連結:https://pan.baidu.com/s/1rJvjp-kMsEterYf_oud28Q   提取碼:awiw  程式碼如下: public bool Word

順序棧實現十進位制整數轉換r(2、8、16進位制

參考程式碼1: /順序棧結構利用陣列實現—引數由指標傳遞/ #include<stdlib.h> #include<stdio.h> #include<stddef.h> #define MAXSIZE 50 typedef char ElemTyp

php如何html中的br換轉換文字輸入中的換

PHP中的有個非常好的函式:nl2br(),將文字框中的換行轉換為HTML頁面的<br />,但是如何實現將html中的<br />換行符轉換為文字框中的換行符呢?下面這幾個方法將能夠幫你解決這個問題。 PHP版將html中的<br /&g

ABAP內表資料轉換HTML格式的檔案

TYPES: BEGIN OF TY_VBAP,          VBELN TYPE VBELN,          POSNR TYPE POSNR,          MATNR TYPE MATNR,        END OF TY_VBAP.*-ALL rel

處理list 轉換json,js時間顯示毫秒問題

1.後臺將一個list轉換為json HttpServletResponse response = getResponse();         response.setContentType("text/json;charset=utf-8");         Prin

如何一個C++程式碼工程轉換matlab的mex檔案直接呼叫呢

1)首先我們要寫一個介面函式mexFunction(),這個介面函式就是類似C++的main函式,它是入口函式,傳遞引數給我們的C++函式。 #include "mex.h" //mx函式,mex函式用到的標頭檔案 #include "exp.h"//呼叫函式用到的標頭檔

linux-linux環境下ANSI轉換UTF-8

使用vim開啟linux文字檔案,發現亂碼。 1. 查詢檔案的編碼格式 在Vim中可以直接檢視檔案編碼, :set fileencoding 即可顯示檔案編碼格式。 [root@cdh01 2018-05-02]# vim 遺留問題1.txt 1¡

Android .sql格式檔案轉換.db格式資料庫檔案

有些時候,我們的android應用程式需要用到外部的資料庫檔案。我們也清楚,適合於android平臺使用的或許是.db格式的資料庫檔案了。 下面說下如何將.sql格式的資料庫檔案利用Navicat Lite得到.db格式檔案。 步驟如下: 下載安裝Nav

linux配置網絡卡IP地址命令詳細介紹一些常用網路配置命令

Linux命令列下配置IP地址不像圖形介面下那麼方 便,完全需要我們手動配置,下面就給大家介紹幾種配置的方法: 即時生效(重啟後失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0  //新增IP地址 rout

C語言利用棧實現中綴表示式轉換字尾表示式(即逆波蘭式

輸入計算表示式如:(1-3)*4+10/5 輸出的逆波蘭式:1  3  -  4  * 10  5  /   + 碼程式碼時臉上洋溢著的神祕的微笑 #include <stdio.h> #include <stdlib.h> #include

linux安全配置-ssh服務隱藏於Internet(端口碰撞

交流 sbin 開啟 信息 done opts 必須 image for 一:設備信息 要保護的服務器:ubuntu14.04 192.168.1.38 ssh測試機:kali2.0 192.168.1.47 二:配置過程 1

Linux軟體之怎樣把軟體徹底刪除乾淨?如何徹底刪除軟體配置檔案?(Ubuntu

文章目錄 操作 命令詳細說明 dpkg -l grep "^rc" awk '{print $2}' xargs aptitude -y purge 操作

LINUX下使用《DU》命令檢視某檔案目錄的大小

du -ah --max-depth=1     這個是我想要的結果  a表示顯示目錄下所有的檔案和資料夾(不含子目錄),h表示以人類能看懂的方式,max-depth表示目錄的深度。 du -sh 目錄 &nbs

eclipse如何把java程式碼,打包成jar檔案以及轉換exe可執行檔案

1、背景:     學習java時,教材中關於如題問題,只有一小節說明,而且要自己寫麻煩的配置檔案,最終結果卻只能轉換為jar檔案。實在是心有不爽。此篇部落格教你如何方便快捷地把java程式碼,打包成jar檔案以及轉換為exe可執行檔案 2、前言:     我們都知道

eclipse -- 手把手教你如何把java程式碼,打包成jar檔案以及轉換exe可執行檔案

1、背景:     學習java時,教材中關於如題問題,只有一小節說明,而且要自己寫麻煩的配置檔案,最終結果卻只能轉換為jar檔案。實在是心有不爽。此篇部落格教你如何方便快捷地把java程式碼,打包成jar檔案以及轉換為exe可執行檔案 2、前言:     我們都知道Java可以將二進位制程式打包成可執

linux中ls命令:(顯示指定目錄裡的檔案資料夾清單)

                列出目錄下的所有檔案,包括以 . 開頭的隱含檔案。 -A,–almost-all          列出除了 . 及 .. 以外的任何專案 –author              印出每個檔案的作者 -b,–escape              把檔名中不可輸出的字元用反斜