1、 readelf
readelf <option(s)> elf-file(s)
- 示例:
- 查看so依賴
readelf -d liba.so | grep NEEDED - 查看so Section
readelf -S liba.so - 查看so所有header信息
readelf -e liba.so等價于readelf -h -l -S liba.so
- 查看so依賴
- 參數(shù)
<option(s)>:
-a
--all 顯示全部信息,等價于 -h -l -S -s -r -d -V -A -I.
-h --file-header 顯示elf文件開始的文件頭信息.
-l --program-headers --segments 顯示程序頭(段頭)信息(如果有的話)。
-S --section-headers --sections 顯示節(jié)頭信息(如果有的話)。
-g --section-groups 顯示節(jié)組信息(如果有的話)。
-t --section-details 顯示節(jié)的詳細(xì)信息(-S的)。
-s --syms --symbols 顯示符號表段中的項(xiàng)(如果有的話)。
-e --headers 顯示全部頭信息,等價于: -h -l -S
-n --notes 顯示note段(內(nèi)核注釋)的信息。
-r --relocs 顯示可重定位段的信息。
-u --unwind 顯示unwind段信息。當(dāng)前只支持IA64 ELF的unwind段信息。
-d --dynamic 顯示動態(tài)段的信息。
-V --version-info 顯示版本段的信息。
-A --arch-specific 顯示CPU構(gòu)架信息。
-D --use-dynamic 使用動態(tài)段中的符號表顯示符號,而不是使用符號段。
-x <number or name> --hex-dump=<number or name> 以16進(jìn)制方式顯示指定段內(nèi)內(nèi)容。number指定段表中段的索引,或字符串指定文件中的段名。
-I --histogram 顯示符號的時候,顯示bucket list長度的柱狀圖。
-v --version 顯示readelf的版本信息。
-H --help 顯示readelf所支持的命令行選項(xiàng)。
-W --wide 寬行輸出。
2、objdump
查看so依賴庫
objdump -x libotpcalibration.so | grep NEEDED-
反編譯成匯編程序
反編譯so
aarch64-linux-android-objdump -d ./libxxx.so > tmp.txt
aarch64-linux-android-objdump -dCSl camera.qcom.so > dump.txt反編譯vmlinux
aarch64-linux-androidkernel-objdump -S --start-address=0xffffffc010e725e4 --stop-address=0xffffffc010e72618 vmlinux > tmp.txt
參數(shù)選項(xiàng)
-a --archive-headers
# 顯示檔案庫的成員信息,類似ls -l將lib*.a的信息列出。
-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)碼格式列表。
-C --demangle
# 將底層的符號名解碼成用戶級名字,除了去掉所開頭的下劃線之外,還使得C++函數(shù)名以可理解的方式顯示出來。
--debugging
-g
# 顯示調(diào)試信息。企圖解析保存在文件中的調(diào)試信息并以C語言的語法顯示出來。僅僅支持某些類型的調(diào)試信息。有些其他的格式被readelf -w支持。
-e --debugging-tags
# 類似-g選項(xiàng),但是生成的信息是和ctags工具相兼容的格式。
--disassemble
-d
# 從objfile中反匯編那些特定指令機(jī)器碼的section。
-D --disassemble-all
# 與 -d 類似,但反匯編所有section.
--prefix-addresses
# 反匯編的時候,顯示每一行的完整地址。這是一種比較老的反匯編格式。
-EB
-EL
--endian={big|little}
# 指定目標(biāo)文件的小端。這個項(xiàng)將影響反匯編出來的指令。在反匯編的文件沒描述小端信息的時候用。例如S-records.
-f
--file-headers
顯示objfile中每個文件的整體頭部摘要信息。
-h
--section-headers
--headers
顯示目標(biāo)文件各個section的頭部摘要信息。
-H
--help
簡短的幫助信息。
-i
--info
顯示對于 -b 或者 -m 選項(xiàng)可用的架構(gòu)和目標(biāo)格式列表。
-j name
--section=name
僅僅顯示指定名稱為name的section的信息
-l
--line-numbers
用文件名和行號標(biāo)注相應(yīng)的目標(biāo)代碼,僅僅和-d、-D或者-r一起使用使用-ld和使用-d的區(qū)別不是很大,在源碼級調(diào)試的時候有用,要求編譯時使用了-g之類的調(diào)試編譯選項(xiàng)。
-m machine
--architecture=machine
指定反匯編目標(biāo)文件時使用的架構(gòu),當(dāng)待反匯編文件本身沒描述架構(gòu)信息的時候(比如S-records),這個選項(xiàng)很有用??梢杂?i選項(xiàng)列出這里能夠指定的架構(gòu).
--reloc
-r
顯示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反匯編后的格式顯示出來。
--dynamic-reloc
-R
顯示文件的動態(tài)重定位入口,僅僅對于動態(tài)目標(biāo)文件意義,比如某些共享庫。
-s
--full-contents
顯示指定section的完整內(nèi)容。默認(rèn)所有的非空section都會被顯示。
-S
--source
盡可能反匯編出源代碼,尤其當(dāng)編譯的時候指定了-g這種調(diào)試參數(shù)時,效果比較明顯。隱含了-d參數(shù)。
--show-raw-insn
反匯編的時候,顯示每條匯編指令對應(yīng)的機(jī)器碼,如不指定--prefix-addresses,這將是缺省選項(xiàng)。
--no-show-raw-insn
反匯編時,不顯示匯編指令的機(jī)器碼,如不指定--prefix-addresses,這將是缺省選項(xiàng)。
--start-address=address
從指定地址開始顯示數(shù)據(jù),該選項(xiàng)影響-d、-r和-s選項(xiàng)的輸出。
--stop-address=address
顯示數(shù)據(jù)直到指定地址為止,該項(xiàng)影響-d、-r和-s選項(xiàng)的輸出。
-t
--syms
顯示文件的符號表入口。類似于nm -s提供的信息
-T
--dynamic-syms
顯示文件的動態(tài)符號表入口,僅僅對動態(tài)目標(biāo)文件意義,比如某些共享庫。它顯示的信息類似于 nm -D|--dynamic 顯示的信息。
-V
--version
版本信息
--all-headers
-x
顯示所可用的頭信息,包括符號表、重定位入口。-x 等價于-a -f -h -r -t 同時指定。
-z
--disassemble-zeroes
一般反匯編輸出將省略大塊的零,該選項(xiàng)使得這些零塊也被反匯編。
@file 可以將選項(xiàng)集中到一個文件中,然后使用這個@file選項(xiàng)載入
3、addr2line
Linux下addr2line命令用于將程序指令地址轉(zhuǎn)換為所對應(yīng)的函數(shù)名、以及函數(shù)所在的源文件名和行號。帶debug符號信息的so/程序可使用addr2line命令快速定位出錯的位置,語法格式:
addr2line [參數(shù)] [地址]
- 常用參數(shù)
-a 在函數(shù)名、文件和行號信息之前,顯示地址,以十六進(jìn)制形式
-b 指定目標(biāo)文件的格式為bfdname
-e 指定需要轉(zhuǎn)換地址的可執(zhí)行文件名
-j 給出的地址代表指定section偏移,而非絕對地址
-C 將低級別的符號名解碼為用戶級別的名字
-f 在顯示文件名、行號的同時顯示函數(shù)名信息
-p 每一個地址的信息占一行
- 示例
addrline -Cfe liba.so 0x132c- 查看是否由.debug_xxx Section
readelf -S liba.so - 查看so是否strip
file liba.so
- 查看是否由.debug_xxx Section