日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 最常用的指令- [readelf][objdump] 读取elf 文件系列

發布時間:2023/12/20 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 最常用的指令- [readelf][objdump] 读取elf 文件系列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、readelf

? ? ? ?readelf 命令用來顯示一個或者多個 elf 格式的目標文件的信息,可以通過它的選項來控制顯示哪些信息。

? ? ? ? ?這個程序和objdump提供的功能類似,但是它顯示的信息更為具體,并且它不依賴BFD庫(BFD庫是一個GNU項目,它的目標就是希望通過一種統一的接口來處理不同的目標文件),所以即使BFD庫有什么bug存在的話也不會影響到readelf程序。?

1.1?ELF文件類型

  • 可重定位文件:用戶和其他目標文件一起創建可執行文件或者共享目標文件,例如lib*.a文件。
  • 可執行文件:用于生成進程映像,載入內存執行,例如編譯好的可執行文件a.out。
  • 共享目標文件:用于和其他共享目標文件或者可重定位文件一起生成elf目標文件或者和執行文件一起創建進程映像,例如lib*.so文件。

1.2 ELF文件作用

? ? ? ?ELF文件參與程序的連接(建立一個程序)和程序的執行(運行一個程序),所以可以從不同的角度來看待elf格式的文件:

  • 如果用于編譯和鏈接(可重定位文件),則編譯器和鏈接器將把 elf 文件看作是節頭表描述的節的集合,程序頭表可選。
  • 如果用于加載執行(可執行文件),則加載器則將把elf文件看作是程序頭表描述的段的集合,一個段可能包含多個節,節頭表可選。
  • 如果是共享文件,則兩者都含有。

1.3 ELF文件總體組成

? ? ? ?elf文件頭描述elf文件的總體信息。包括:系統相關,類型相關,加載相關,鏈接相關。

  • 系統相關表示:elf文件標識的魔術數,以及硬件和平臺等相關信息,增加了elf文件的移植性,使交叉編譯成為可能。
  • 類型相關就是前面說的那個類型。
  • 加載相關:包括程序頭表相關信息。
  • 鏈接相關:節頭表相關信息。

1.4 選項

-a

--all

顯示全部信息,等價于 -h -l -S -s -r -d -V -A -I.

-h

--file-header

顯示elf文件開始的文件頭信息.

-l

--program-headers

--segments

顯示程序頭(段頭)信息(如果有的話)。

-S

--section-headers

--sections

顯示節頭信息(如果有的話)。

-g

--section-groups

顯示節組信息(如果有的話)。

-t

--section-details

顯示節的詳細信息(-S的)。

-s

--syms

--symbols

顯示符號表段中的項(如果有的話)。

-e

--headers

顯示全部頭信息,等價于: -h -l -S -n --notes 顯示note段(內核注釋)的信息。

-r

--relocs

顯示可重定位段的信息。

-u

--unwind

顯示unwind段信息。當前只支持IA64 ELF的unwind段信息。

-d

--dynamic

顯示動態段的信息。

-V

--version-info

顯示版本段的信息。

-A

--arch-specific

顯示CPU構架信息。

-D

--use-dynamic

使用動態段中的符號表顯示符號,而不是使用符號段。

-x <number or name>

--hex-dump=<number or name>

以16進制方式顯示指定段內內容。number指定段表中段的索引,或字符串指定文件中的段名。

-w[liaprmfFsoR]

or

--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]

顯示調試段中指定的內容。

-I

--histogram

顯示符號的時候,顯示bucket list長度的柱狀圖。

-v

--version

顯示readelf的版本信息。

-H

--help

顯示readelf所支持的命令行選項。

-W

--wide

寬行輸出。

二、objdump

? ? ? ? objdump 命令是 Linux 下的反匯編目標文件或者可執行文件的命令,?是用查看目標文件或者可執行的目標文件的構成的 gcc工具。

-a

--archive-headers

# 顯示檔案庫的成員信息,類似ls -l將lib*.a的信息列出。

-b bfdname

--target=bfdname

# 指定目標碼格式。這不是必須的,objdump 能自動識別許多格式。

比如:

objdump -b oasys -m vax -h fu.o

# 顯示fu.o的頭部摘要信息,明確指出該文件是Vax系統下用Oasys編譯器生成的目標文件。objdump -i將給出這里可以指定的目標碼格式列表。

-C

--demangle

# 將底層的符號名解碼成用戶級名字,除了去掉所開頭的下劃線之外,還使得C++函數名以可理解的方式顯示出來。

--debugging

-g

# 顯示調試信息。企圖解析保存在文件中的調試信息并以C語言的語法顯示出來。僅僅支持某些類型的調試信息。有些其他的格式被readelf -w支持。

-e

--debugging-tags

# 類似-g選項,但是生成的信息是和ctags工具相兼容的格式。

--disassemble

-d

# 從objfile中反匯編那些特定指令機器碼的section。

-D

--disassemble-all

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

--prefix-addresses

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

-EB

-EL@file 可以將選項集中到一個文件中,然后使用這個@file選項載入。

--endian={big|little}

# 指定目標文件的小端。這個項將影響反匯編出來的指令。在反匯編的文件沒描述小端信息的時候用。例如S-records.

-f

--file-headers

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

-h@file 可以將選項集中到一個文件中,然后使用這個@file選項載入。

--section-headers

--headers

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

-H

--help

簡短的幫助信息。

-i

--info

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

-j name

--section=name

僅僅顯示指定名稱為name的section的信息

-l

--line-numbers

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

-m machine

--architecture=machine

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

--reloc

-r@file 可以將選項集中到一個文件中,然后使用這個@file選項載入。

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

--dynamic-reloc

-R

顯示文件的動態重定位入口,僅僅對于動態目標文件意義,比如某些共享庫。

-s

--full-contents

顯示指定section的完整內容。默認所有的非空section都會被顯示。

-S

--source

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

--show-raw-insn

反匯編的時候,顯示每條匯編指令對應的機器碼,如不指定--prefix-addresses,這將是缺省選項。

--no-show-raw-insn

@file 可以將選項集中到一個文件中,然后使用這個@file選項載入。反匯編時,不顯示匯編指令的機器碼,如不指定--prefix-addresses,這將是缺省選項。

--start-address=address

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

--stop-address=address

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

-t

--syms

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

-T

--dynamic-syms

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

-V

--version

版本信息

--all-headers

-x

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

-z

--disassemble-zeroes

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

總結

以上是生活随笔為你收集整理的linux 最常用的指令- [readelf][objdump] 读取elf 文件系列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。