objdump有點象那個快速查看之類的工具,就是以一種可閱讀的格式讓你更多地了解二進制文件可能帶有的附加信息。對於一般只想讓自己程序跑起來的程序員,這個命令沒有更多意義,對於想進一步了解系統的程序員,應該掌握這種工具,至少你可以自己寫寫shellcode了,或者看看人家給的exploit中的shellcode是什麼東西。
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-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 section addresses do not correspond to the
symbol table, which can happen when putting sections atparticular addresses when using a format which cannot 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選項的輸出。