国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用于查看目標文件或可執行文件的組成信息的命令:objdump命令

Linux愛好者 ? 來源:Linux愛好者 ? 作者:戀貓大鯉魚 ? 2021-02-09 18:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.功能簡介

objdump 命令是 GNU Binutils 二進制工具集的一員,用于查看目標文件或可執行文件的組成信息,以可讀的形式打印二進制文件的內容。

2.命令格式

objdump[OPTIONS]OBJFILES

3.選項說明

-a,--archive-headers
顯示檔案頭信息,展示檔案每一個成員的文件格式。效果等同于命令 ar -tv
-b,--target=BFDNAME
指定目標碼格式。這不是必須的,objdump 能自動識別許多格式,比如 objdump -b oasys -m vax -h fu.o 顯示 fu.o 的頭部摘要信息,明確指出該文件是 Vax 系統下用 Oasys 編譯器生成的目標文件。objdump -i 將給出這里可以指定的目標碼格式列表
-C,--demangle[=STYLE]
目標文件中的符號解碼成用戶級名稱。比如移除符號修飾時在變量與函數名前添加的下劃線等。
-d,--disassemble
反匯編目標文件,將機器指令反匯編成匯編代碼
-D,--disassemble-all
與-d類似,但反匯編所有段(section)
-z,--disassemble-zeroes
一般反匯編輸出將省略零塊,該選項使得這些零塊也被反匯編
-EB,-EL,--endian={big|little}
指定目標文件的字節序,在目標文件沒描述字節序時很有用,例如 S-records。這個選項只影響反匯編
-f,--file-headers
顯示每一個目標文件的頭信息
-F,--file-offsets
反匯編時,打印每一個符號的偏移地址
--file-start-context
顯示源碼/匯編代碼(假設為-S)時,將上下文擴展到文件的開頭
-g,--debugging
顯示調試信息。企圖解析保存在文件中的調試信息并以 C 語言的語法顯示出來。僅僅支持某些類型的調試信息。有些其他的格式被readelf -w支持
-e,--debugging-tags
類似-g選項,但是生成的信息是和ctags工具相兼容的格式
-h,--section-headers,--headers
顯示目標文件各個section的頭部摘要信息
-i,--info
顯示對于-b或者-m選項可用的架構和目標格式列表
-j,--section=NAME
僅顯示指定名稱的section的信息
-l,--line-numbers
用文件名和行號標注相應的目標代碼,僅僅和-d、-D或者-r一起使用
-S,--source
反匯編時盡可能使用源代碼表示。隱含了-d參數
-m,--architecture=MACHINE
指定反匯編目標文件時使用的架構,當待反匯編文件本身沒描述架構信息的時候(比如S-records),這個選項很有用。可以用-i選項列出這里能夠指定的架構
-M,--disassembler-options=OPTIONS
給反匯編程序傳遞參數,可以指定多個,使用逗號分隔
-p,--private-headers
打印目標文件格式的特定信息。打印的信息取決于目標文件格式,對于某些目標文件格式,不打印任何附加信息。
-P,--private=OPTIONS
打印目標文件格式的特定信息。OPTIONS 是一個逗號分隔的列表。例如對于XCOFF,可用的選項有 header, aout, sections, syms, relocs, lineno, loader, except, typchk, traceback and toc
-r,--reloc
顯示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反匯編后的格式顯示出來
-R,--dynamic-reloc
顯示文件的動態重定位入口,僅僅對于動態目標文件意義,比如某些共享庫
-s,--full-contents
顯示section的完整內容。默認所有的非空section都會被顯示
-W[lLiaprmfFsoRt],--dwarf=[rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]
顯示文件中調試段的內容,如果存在的話
-G,--stabs
顯示請求的任何 section 的全部內容。顯示段 .stab、.stab.index 和 .stab.excl 的內容
-t,--syms
顯示文件的符號表入口。類似于nm -s提供的信息
-T,--dynamic-syms
顯示文件的動態符號表入口,僅僅對動態目標文件意義,比如某些共享庫。它顯示的信息類似于 nm -D,--dynamic 顯示的信息
-x,--all-headers
顯示所可用的頭信息,包括符號表、重定位入口。-x 等價于-a -f -h -p -r -t 同時指定
-w,--wide
為具有超過80列的輸出設備格式化某些行。也不要在顯示符號名稱時截斷符號名稱
--start-address=ADDRESS
從指定地址開始顯示數據,該選項影響-d、-r和-s選項的輸出
--stop-address=ADDRESS
顯示數據直到指定地址為止,該項影響-d、-r和-s選項的輸出
--prefix-addresses
反匯編的時候,顯示每一行的完整地址。這是一種比較老的反匯編格式
--no-show-raw-insn
反匯編時,不顯示匯編指令的機器碼。當使用--prefix-addresses時,這是缺省選項
--adjust-vma=OFFSET
當解析信息時,首先給所有的段添加偏移值offset。當段地址與符號表不符時,這個選項很有用。比如將段放置到特殊地址,因為某個格式無法表示段地址,比如 a.out
--special-syms
顯示特殊符號與用戶不關心的符號
--prefix=PREFIX
當使用-S時,指定前綴添加到絕對路徑中
--prefix-strip=LEVEL
指定剝離絕對路徑中多少個前綴目錄名。此選項只有在使用了選項--prefix=PREFIX 才有效
--insn-width=WIDTH
指定反匯編后的指令輸出的行寬,單位字節
-V,--version
版本信息
-H,--help
幫助信息

4.常用示例

首先給出后面大部分測試所基于的源代碼以及編譯指令。涉及兩個 C++ 源文件。
objdump.cpp:

main.cpp:

#include
usingnamespacestd;

voidprint();

intmain()
{
print();
}

使用-g選項加入調試信息,分別編譯生成目標文件objdump.o與main.o。

g++-c-gobjdump.cpp-oobjdump.o
g++-c-gmain.cpp-omain.o

然后通過ar命令將兩個目標文件打包成靜態庫libobjdump.a。

arcrvlibobjdump.amain.oobjdump.o

(1)查看檔案包含的目標文件列表。

[root@TENCENT64~]#objdump-alibobjdump.a
Inarchivelibobjdump.a:

main.o:fileformatelf64-x86-64
rw-r--r--0/018696Mar820:252019main.o

objdump.o:fileformatelf64-x86-64
rw-r--r--0/021352Mar820:252019objdump.o

使用命令ar -tv也可以列出檔案中包含的目標文件。

[root@TENCENT64~]#ar-tvlibobjdump.a
rw-r--r--0/018696Mar820:252019main.o
rw-r--r--0/021352Mar820:252019objdump.o

(2)顯示目標文件objdump.o的代碼段(.text)內容。

[root@TENCENT64~]#objdump--section=.text-sobjdump.o
objdump.o:fileformatelf64-x86-64

Contentsofsection.text:
0000554889e5be00000000bf00000000e800UH..............
0010000000be000000004889c7e800000000........H.......
00205dc3554889e54883ec10897dfc8975f8].UH..H....}..u.
0030837dfc017527817df8ffff0000751ebf.}..u'.}.....u..
004000000000e800000000ba00000000be00................
0050000000bf00000000e800000000c9c355...............U
00604889e5beffff0000bf01000000e8b0ffH...............
0070ffff5dc3..].

注意,不能單獨使用-j或者–section選項,一定要加上-s選項。

(3)反匯編objdump.o中的text段內容,并盡可能用源代碼形式表示。

[root@TENCENT64~]#objdump--section=.text-Sobjdump.o
objdump.o:fileformatelf64-x86-64

Disassemblyofsection.text:

0000000000000000<_Z5printv>:
#include

voidprint()
{
0:55push%rbp
1:4889e5mov%rsp,%rbp
std::cout<<"objdump"<$0x0,%esi
9:bf00000000mov$0x0,%edi
e:e800000000callq13<_Z5printv+0x13>
13:be00000000mov$0x0,%esi
18:4889c7mov%rax,%rdi
1b:e800000000callq20<_Z5printv+0x20>
}
20:5dpop%rbp
21:c3retq

0000000000000022<_Z41__static_initialization_and_destruction_0ii>:
22:55push%rbp
23:4889e5mov%rsp,%rbp
26:4883ec10sub$0x10,%rsp
2a:897dfcmov%edi,-0x4(%rbp)
2d:8975f8mov%esi,-0x8(%rbp)
30:837dfc01cmpl$0x1,-0x4(%rbp)
34:7527jne5d<_Z41__static_initialization_and_destruction_0ii+0x3b>
36:817df8ffff0000cmpl$0xffff,-0x8(%rbp)
3d:751ejne5d<_Z41__static_initialization_and_destruction_0ii+0x3b>
externwostreamwclog;///Linkedtostandarderror(buffered)
#endif
//@}

//Forconstructionoffilebuffersforcout,cin,cerr,cloget.al.
staticios_base::Init__ioinit;
3f:bf00000000mov$0x0,%edi
44:e800000000callq49<_Z41__static_initialization_and_destruction_0ii+0x27>
49:ba00000000mov$0x0,%edx
4e:be00000000mov$0x0,%esi
53:bf00000000mov$0x0,%edi
58:e800000000callq5d<_Z41__static_initialization_and_destruction_0ii+0x3b>
5d:c9leaveq
5e:c3retq

000000000000005f<_GLOBAL__sub_I__Z5printv>:
5f:55push%rbp
60:4889e5mov%rsp,%rbp
63:beffff0000mov$0xffff,%esi
68:bf01000000mov$0x1,%edi
6d:e8b0ffffffcallq22<_Z41__static_initialization_and_destruction_0ii>
72:5dpop%rbp
73:c3retq

(3)顯示目標文件的符號表入口。

[root@TENCENT64~]#objdump-tobjdump.o
objdump.o:fileformatelf64-x86-64

SYMBOLTABLE:
0000000000000000ldf*ABS*0000000000000000objdump.cpp
0000000000000000ld.text0000000000000000.text
0000000000000000ld.data0000000000000000.data
0000000000000000ld.bss0000000000000000.bss
0000000000000000lO.bss0000000000000001_ZStL8__ioinit
0000000000000000ld.rodata0000000000000000.rodata
0000000000000022lF.text000000000000003d_Z41__static_initialization_and_destruction_0ii
000000000000005flF.text0000000000000015_GLOBAL__sub_I__Z5printv
0000000000000000ld.init_array0000000000000000.init_array
0000000000000000ld.debug_info0000000000000000.debug_info
0000000000000000ld.debug_abbrev0000000000000000.debug_abbrev
0000000000000000ld.debug_aranges0000000000000000.debug_aranges
0000000000000000ld.debug_line0000000000000000.debug_line
0000000000000000ld.debug_str0000000000000000.debug_str
0000000000000000ld.note.GNU-stack0000000000000000.note.GNU-stack
0000000000000000ld.eh_frame0000000000000000.eh_frame
0000000000000000ld.comment0000000000000000.comment
0000000000000000gF.text0000000000000022_Z5printv
0000000000000000*UND*0000000000000000_ZSt4cout
0000000000000000*UND*0000000000000000_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
0000000000000000*UND*0000000000000000_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
0000000000000000*UND*0000000000000000_ZNSolsEPFRSoS_E
0000000000000000*UND*0000000000000000_ZNSt8ios_base4InitC1Ev
0000000000000000*UND*0000000000000000.hidden__dso_handle
0000000000000000*UND*0000000000000000_ZNSt8ios_base4InitD1Ev
0000000000000000*UND*0000000000000000__cxa_atexit

這里,輸出的信息類似nm -s命令的輸出,相比較之下,nm命令的輸出如下:

[root@TENCENT64~]#nm-sobjdump.o
U__cxa_atexit
U__dso_handle
000000000000005ft_GLOBAL__sub_I__Z5printv
0000000000000022t_Z41__static_initialization_and_destruction_0ii
0000000000000000T_Z5printv
U_ZNSolsEPFRSoS_E
U_ZNSt8ios_base4InitC1Ev
U_ZNSt8ios_base4InitD1Ev
U_ZSt4cout
U_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
0000000000000000b_ZStL8__ioinit
U_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc

(4)顯示目標文件各個段的頭部摘要信息。

[root@TENCENT64~]#objdump-hobjdump.o
objdump.o:fileformatelf64-x86-64

Sections:
IdxNameSizeVMALMAFileoffAlgn
0.text0000007400000000000000000000000000000000000000402**2
CONTENTS,ALLOC,LOAD,RELOC,READONLY,CODE
1.data0000000000000000000000000000000000000000000000b42**2
CONTENTS,ALLOC,LOAD,DATA
2.bss0000000100000000000000000000000000000000000000b42**2
ALLOC
3.rodata0000000800000000000000000000000000000000000000b42**0
CONTENTS,ALLOC,LOAD,READONLY,DATA
4.init_array0000000800000000000000000000000000000000000000c02**3
CONTENTS,ALLOC,LOAD,RELOC,DATA
5.debug_info000014f900000000000000000000000000000000000000c82**0
CONTENTS,RELOC,READONLY,DEBUGGING
6.debug_abbrev0000039f00000000000000000000000000000000000015c12**0
CONTENTS,READONLY,DEBUGGING
7.debug_aranges0000003000000000000000000000000000000000000019602**0
CONTENTS,RELOC,READONLY,DEBUGGING
8.debug_line0000024400000000000000000000000000000000000019902**0
CONTENTS,RELOC,READONLY,DEBUGGING
9.debug_str00000e4c0000000000000000000000000000000000001bd42**0
CONTENTS,READONLY,DEBUGGING
10.comment0000002d0000000000000000000000000000000000002a202**0
CONTENTS,READONLY
11.note.GNU-stack000000000000000000000000000000000000000000002a4d2**0
CONTENTS,READONLY
12.eh_frame000000780000000000000000000000000000000000002a502**3
CONTENTS,ALLOC,LOAD,RELOC,READONLY,DATA

參考文獻

[1] objdump manual
[2] objdump命令.Linux命令大全
[3] GNU Binutils

責任編輯:xj

原文標題:每天一個 Linux 命令(106):objdump 命令

文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    88

    文章

    11758

    瀏覽量

    219012
  • 命令
    +關注

    關注

    5

    文章

    755

    瀏覽量

    23752

原文標題:每天一個 Linux 命令(106):objdump 命令

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    飛凌嵌入式ElfBoard-進程之什么是進程

    將源碼轉換為計算機可以理解的二進制機器語言指令。解釋型腳本形式:腳本是包含命令的文本文件,可以由shell或者其他命令解釋器之類的程序直接處理。(如:python、Bash)等腳本語言通過解釋器
    發表于 01-26 08:42

    初識ros2 功能包建立與可執行文件的配置

    本文介紹了ROS2程序的兩種啟動方式:直接運行可執行文件(ros2 run)和使用啟動文件(ros2 launch)。重點講解了Python軟件包的結構,包括package.xml、setup.py
    的頭像 發表于 01-22 13:41 ?234次閱讀

    如何將Python GUI程序打包成EXE可執行文件

    如果我們給同事展示一個命令行,他們可能會有點“嚇人”的感覺,擔心忘記或輸錯參數。而一個 UI 界面則是一目了然,“選擇固件→點擊下載”這樣的流程幾乎零學習成本。
    的頭像 發表于 12-16 09:08 ?3684次閱讀
    如何將Python GUI程序打包成EXE<b class='flag-5'>可執行文件</b>

    飛凌嵌入式ElfBoard-獲取文件的狀態信息文件權限

    可執行文件等。b:表示這是一個塊設備文件,如硬盤、光驅等。c:表示這是一個字符設備文件,如鍵盤、鼠標等。l:表示這是一個符號鏈接(軟連接)。s:表示這是一個套接字文件(socket)
    發表于 12-16 08:40

    采用匯編指示符來使用自定義指令

    ,.dword為插入雙字即64位。以下為演示過程: * 在main.c中編寫如下代碼 * 使用riscv-nuclei-elf-gcc main.c命令編譯main.c。 生成默認名a.out可執行文件
    發表于 10-28 06:02

    飛凌嵌入式ElfBoard-Vim編輯器之GCC的基本使用

    ./hello_ubuntu,可以看到輸出結果和我們程序的要求一致。如果編譯命令不添加-o hello_ubuntu,則編譯完成生成的是a.out可執行文件,輸出結果是一樣的。elf@ubuntu:~/work
    發表于 10-16 09:05

    飛凌嵌入式ElfBoard-Linux系統基礎入門-文件操作相關shell命令

    -iname文件名稱符合,忽略大小寫示例:2.5.12 whereis查找文件命令:whereis功能:用于定位可執行文件、源代碼
    發表于 09-30 09:46

    飛凌嵌入式ElfBoard ELF 1板卡-Linux系統基礎入門-目錄相關shell命令

    ,權限,時間等信息-t依照建立時間順序列出文件-F按類型列出文件,在文件末尾用不同符號區分斜線(/)表示目錄星號(*)表示可執行文件@符號
    發表于 09-29 10:12

    測試工程師都在用的Linux命令清單(建議收藏)

    的Linux命令,并結合實際場景解析其應用方法。一、文件和目錄操作:基礎中的基礎1.1文件查看命令#查看
    的頭像 發表于 08-08 10:06 ?697次閱讀
    測試工程師都在用的Linux<b class='flag-5'>命令</b>清單(建議收藏)

    ESP32驅動SPIFFS進行文件操作

    本篇文章介紹如何在ESP32開發板上使用SPIFFS(SPI Flash File System)進行文件操作。看下如何初始化SPIFFS文件系統、讀取文件、列出文件、刪除
    的頭像 發表于 08-05 18:11 ?4262次閱讀
    ESP32驅動SPIFFS進<b class='flag-5'>行文件</b>操作

    Linux基礎命令which詳解

    在Linux系統中,which命令用于查找并顯示指定命令可執行文件路徑。這對于系統管理員和開發人員來說是一個非常有用的工具,可以幫助定位命令
    的頭像 發表于 07-29 17:58 ?851次閱讀

    【Milk-V Duo S 開發板免費體驗】移植lrzsz方便使用zmodem進行文件傳輸

    生成的可執行文件位于src下三. 測試導出文件到開發板scp src/lrz root@192.168.42.1:/root 需要輸入密碼milkv scp src/lsz
    發表于 07-08 15:01

    Linux系統查看及修改設備型號信息,觸覺智能RK3562開發板演示

    本文介紹Linux系統如何查看及修改設備型號信息的方法,適用于查看設備型號信息或者想將設備型號信息
    的頭像 發表于 06-19 15:58 ?1034次閱讀
    Linux系統<b class='flag-5'>查看</b>及修改設備型號<b class='flag-5'>信息</b>,觸覺智能RK3562開發板演示

    飛凌嵌入式ElfBoard ELF 1板卡-uboot常用命令文件系統命令

    ; fatinfo mmc 1:1 二、fatls fatls 命令用于查詢fat格式設備的目錄和文件信息命令格式如下: fatls[]
    發表于 05-26 17:32

    Linux常用命令大全

    Linux常用命令是指在Linux操作系統中廣泛使用的命令工具,這些命令工具可以完成各種不同的任務,如管理文件和目錄、操作進程、網絡通信、軟件安裝等。
    的頭像 發表于 05-03 18:08 ?1863次閱讀