objdump的使用方法和 symbol table的每列的含義


一、objdump的用法

objdump命令的man手冊

objdump
    [-a] [-b bfname|
    --target=bfdname] [-C] [--debugging]
    [-d] [-D]
    [--disassemble-zeroes]
    [-EB|-EL|--endian={big|little}] [-f]
    [-h] [-i|--info]
    [-j section | --section=section]
    [-l] [-m machine ] [--prefix-addresses]
    [-r] [-R]
    [-s|--full-contents] [-S|--source]
    [--[no-]show-raw-insn] [--stabs] [-t]
    [-T] [-x]
    [--start-address=address] [--stop-address=address]
    [--adjust-vma=offset] [--version] [--help]
    objfile...

--archive-headers

-a 顯示檔案庫的成員信息,與 ar tv 類似
    objdump -a libpcap.a
    和 ar -tv libpcap.a 顯示結果比較比較
    顯然這個選項沒有什么意思。
--adjust-vma=offset
    When dumping information, first add offset to all
    the section addresses. This is useful if the sec-
    tion addresses do not correspond to the symbol
    table, which can happen when putting sections at
    particular addresses when using a format which can
    not represent section addresses, such as a.out.
-b bfdname
--target=bfdname
    指定目標碼格式。這不是必須的,objdump能自動識別許多格式,
    比如:objdump -b oasys -m vax -h fu.o
    顯示fu.o的頭部摘要信息,明確指出該文件是Vax系統下用Oasys
    編譯器生成的目標文件。objdump -i將給出這里可以指定的
    目標碼格式列表
--demangle
-C 將底層的符號名解碼成用戶級名字,除了去掉所有開頭
   的下划線之外,還使得C++函數名以可理解的方式顯示出來。
--debugging
    顯示調試信息。企圖解析保存在文件中的調試信息並以C語言
    的語法顯示出來。僅僅支持某些類型的調試信息。
--disassemble
-d 反匯編那些應該還有指令機器碼的section
--disassemble-all
-D 與 -d 類似,但反匯編所有section
--prefix-addresses
    反匯編的時候,顯示每一行的完整地址。這是一種比較老的反匯編格式。
    顯示效果並不理想,但可能會用到其中的某些顯示,自己可以對比。
--disassemble-zeroes
    一般反匯編輸出將省略大塊的零,該選項使得這些零塊也被反匯編。
-EB
-EL
--endian={big|little}
    這個選項將影響反匯編出來的指令。
    little-endian就是我們當年在dos下玩匯編的時候常說的高位在高地址,
    x86都是這種。

--file-headers
-f 顯示objfile中每個文件的整體頭部摘要信息。

--section-headers
--headers
-h 顯示目標文件各個section的頭部摘要信息。

--help 簡短的幫助信息。

--info
-i 顯示對於 -b 或者 -m 選項可用的架構和目標格式列表。

--section=name
-j name 僅僅顯示指定section的信息

--line-numbers
-l 用文件名和行號標注相應的目標代碼,僅僅和-d、-D或者-r一起使用
   使用-ld和使用-d的區別不是很大,在源碼級調試的時候有用,要求
   編譯時使用了-g之類的調試編譯選項。

--architecture=machine
-m machine
    指定反匯編目標文件時使用的架構,當待反匯編文件本身沒有描述
    架構信息的時候(比如S-records),這個選項很有用。可以用-i選項
    列出這里能夠指定的架構

--reloc
-r 顯示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反匯
   編后的格式顯示出來。

--dynamic-reloc
-R 顯示文件的動態重定位入口,僅僅對於動態目標文件有意義,比如某些
   共享庫。

--full-contents
-s 顯示指定section的完整內容。

    objdump --section=.text -s inet.o | more

--source
-S 盡可能反匯編出源代碼,尤其當編譯的時候指定了-g這種調試參數時,
   效果比較明顯。隱含了-d參數。

--show-raw-insn
    反匯編的時候,顯示每條匯編指令對應的機器碼,除非指定了
    --prefix-addresses,這將是缺省選項。

--no-show-raw-insn
    反匯編時,不顯示匯編指令的機器碼,這是指定 --prefix-addresses
    選項時的缺省設置。

--stabs
    Display the contents of the .stab, .stab.index, and
    .stab.excl sections from an ELF file. This is only
    useful on systems (such as Solaris 2.0) in which
    .stab debugging symbol-table entries are carried in
    an ELF section. In most other file formats, debug-
    ging symbol-table entries are interleaved with
    linkage symbols, and are visible in the --syms output.

--start-address=address
    從指定地址開始顯示數據,該選項影響-d、-r和-s選項的輸出。

--stop-address=address
    顯示數據直到指定地址為止,該選項影響-d、-r和-s選項的輸出。

--syms
-t 顯示文件的符號表入口。類似於nm -s提供的信息

--dynamic-syms
-T 顯示文件的動態符號表入口,僅僅對動態目標文件有意義,比如某些
   共享庫。它顯示的信息類似於 nm -D|--dynamic 顯示的信息。

--version 版本信息

    objdump --version

--all-headers
-x 顯示所有可用的頭信息,包括符號表、重定位入口。-x 等價於
   -a -f -h -r -t 同時指定。

    objdump -x inet.o

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM