必威电竞|足球世界杯竞猜平台

Objdump
來源:互聯(lián)網(wǎng)

Objdump是一個在類Unix操作系統(tǒng)上顯示關(guān)于目標(biāo)文件的各種信息的命令行程序,可以用作反匯編器來以匯編代碼形式查看可執(zhí)行文件。它是GNU Binutils的一部分,用于在可執(zhí)行文件和其他二進制數(shù)據(jù)上進行精細(xì)粒度控制。objdump使用BFD庫來讀取目標(biāo)文件的內(nèi)容。類似的工具包括Borland TDUMP、微軟 DUMPBIN和readélf。在某些平臺(如Mac OS X)上,objdump二進制文件可能實際上被連接到LLVM的objdump,具有不同的命令選項和行為。

Objdump 的概念

objdump 有點象那個快速查看之類的工具,就是以一種可閱讀的格式讓你更多地了解二進制文件可能帶有的附加信息。對于一般只想讓自己程序跑起來的程序員,這個命令沒有更多意義,對于想進一步了解系統(tǒng)的程序員,應(yīng)該掌握這種工具,至少你可以自己寫寫shellcode了,或者看看人家給的 exploit 中的 shellcode 是什么東西。

Objdump 的使用

objdump

[-a] [-b bfdname |

--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-RAWinsn] [--STABs] [-t]

[-T] [-x]

[--start-address=address] [--stop-address=address]

[--adjust-MTV音樂錄影帶大獎=Offset] [--version] [--help]

objfile...

--Archiveheaders

-a 顯示檔案庫的成員信息,與 ar tv 類似

objdump -a libpcap.a

和 ar -tv libpcap.a 顯示結(jié)果比較比較

顯然這個選項沒有什么意思。

--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

指定目標(biāo)碼格式。這不是必須的,objdump能自動識別許多格式,

比如:objdump -b oasys -m vax -h fu.o

顯示fu.o的頭部摘要信息,明確指出該文件是Vax系統(tǒng)下用Oasys

編譯器生成的目標(biāo)文件。objdump -i將給出這里可以指定的

目標(biāo)碼格式列表

--demangle

-C 將底層的符號名解碼成用戶級名字,除了去掉所有開頭

的下劃線之外,還使得C++函數(shù)名以可理解的方式顯示出來。

--debugging

顯示調(diào)試信息。企圖解析保存在文件中的調(diào)試信息并以c語言

的語法顯示出來。僅僅支持某些類型的調(diào)試信息。

--disassemble

-d 反匯編那些應(yīng)該還有指令機器碼的section

--disassemble-all

-D 與 -d 類似,但反匯編所有section

--prefix-addresses

反匯編的時候,顯示每一行的完整地址。這是一種比較老的反匯編格式。

顯示效果并不理想,但可能會用到其中的某些顯示,自己可以對比。

--disassemble-zeroes

一般反匯編輸出將省略大塊的零,該選項使得這些零塊也被反匯編。

-EB

-EL

--endian={big|little}

這個選項將影響反匯編出來的指令。

little-endian就是我們當(dāng)年在dos下玩匯編的時候常說的高位在高地址,

x86都是這種。

--file-headers

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

--section-headers

--headers

-h 顯示目標(biāo)文件各個section的頭部摘要信息。

--help 簡短的幫助信息。

--info

-i 顯示對于 -b 或者 -m 選項可用的架構(gòu)和目標(biāo)格式列表。

--section=name

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

--line-numbers

-l 用文件名和行號標(biāo)注相應(yīng)的目標(biāo)代碼,僅僅和-d、-D或者-r一起使用

使用-ld和使用-d的區(qū)別不是很大,在源碼級調(diào)試的時候有用,要求

編譯時使用了-g之類的調(diào)試編譯選項。

--建筑=machine

-m machine

指定反匯編目標(biāo)文件時使用的架構(gòu),當(dāng)待反匯編文件本身沒有描述

架構(gòu)信息的時候(比如S-records),這個選項很有用。可以用-i選項

列出這里能夠指定的架構(gòu)

--reloc

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

編后的格式顯示出來。

--dynamic-reloc

-R 顯示文件的動態(tài)重定位入口,僅僅對于動態(tài)目標(biāo)文件有意義,比如某些

共享庫。

--full-contents

-s 顯示指定section的完整內(nèi)容。

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

--source

-S 盡可能反匯編出源代碼,尤其當(dāng)編譯的時候指定了-g這種調(diào)試參數(shù)時,

效果比較明顯。隱含了-d參數(shù)。

--show-RAWinsn

反匯編的時候,顯示每條匯編指令對應(yīng)的機器碼,除非指定了

--prefix-addresses,這將是缺省選項。

--no-show-raw-insn

反匯編時,不顯示匯編指令的機器碼,這是指定 --prefix-addresses

選項時的缺省設(shè)置。

--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 symboltable entries are carried in

an ELF section. In most other file formats, debug-

ging symbol-table entries are interleaved with

linkagesymbols, and are visible in the --SYMS output.

--start-address=address

從指定地址開始顯示數(shù)據(jù),該選項影響-d、-r和-s選項的輸出。

--stop-address=address

顯示數(shù)據(jù)直到指定地址為止,該選項影響-d、-r和-s選項的輸出。

--syms

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

--dynamic-syms

-T 顯示文件的動態(tài)符號表入口,僅僅對動態(tài)目標(biāo)文件有意義,比如某些

共享庫。它顯示的信息類似于 nm -D|--dynamic 顯示的信息。

--version 版本信息

objdump --version

--all-headers

-x 顯示所有可用的頭信息,包括符號表、重定位入口。-x 等價于

-a -f -h -r -t 同時指定。

objdump -x inet.o

參考資料 >

生活家百科家居網(wǎng)