微信營銷的案例廣州抖音seo
簡介: CSDN博客專家,專注Android/Linux系統(tǒng),分享多mic語音方案、音視頻、編解碼等技術(shù),與大家一起成長!
優(yōu)質(zhì)專欄:Audio工程師進階系列【原創(chuàng)干貨持續(xù)更新中……】🚀
人生格言: 人生從來沒有捷徑,只有行動才是治療恐懼和懶惰的唯一良藥.
1.前言
本篇目的:如何查看so、bin啟動依賴的庫文件,幫助開發(fā)者快速定位問題。
2.實踐
<1>.readelf命令
在Linux平臺上,readelf
是一個非常有用的命令行工具,用于分析可執(zhí)行文件、共享庫和目標(biāo)文件的ELF格式(Executable and Linkable Format,可執(zhí)行和可鏈接格式)的信息。ELF是Linux系統(tǒng)和其他類Unix系統(tǒng)上可執(zhí)行文件和對象文件的標(biāo)準格式。
以下是一些常用的readelf
命令選項和作用:
-
readelf -h <filename>
:顯示目標(biāo)文件的文件頭信息,包括文件類型、目標(biāo)體系結(jié)構(gòu)、入口點地址等。 -
readelf -l <filename>
:顯示目標(biāo)文件的程序頭信息,包括段的起始地址、大小和屬性等。 -
readelf -S <filename>
:顯示目標(biāo)文件的節(jié)頭信息,包括節(jié)的名稱、起始地址、大小、屬性等。 -
readelf -s <filename>
:顯示目標(biāo)文件的符號表,包括函數(shù)、變量和其他符號信息。 -
readelf -r <filename>
:顯示目標(biāo)文件的重定位表,展示代碼和數(shù)據(jù)的重定位信息。 -
readelf -d <filename>
:顯示目標(biāo)文件的動態(tài)節(jié)信息,包括依賴的共享庫、動態(tài)鏈接信息等。
readelf
命令對于調(diào)試、分析和了解可執(zhí)行文件和目標(biāo)文件的結(jié)構(gòu)非常有用。它可以幫助開發(fā)者查看文件的頭部、節(jié)、符號表等信息,了解程序的組織結(jié)構(gòu)、依賴關(guān)系和動態(tài)鏈接信息,有助于進行代碼審計、調(diào)試和性能優(yōu)化。
# readelf -a libstagefrighthw.so | grep -i needed
0x0000000000000001 (NEEDED) 共享庫:[libutils.so]0x0000000000000001 (NEEDED) 共享庫:[libcutils.so]0x0000000000000001 (NEEDED) 共享庫:[liblog.so]0x0000000000000001 (NEEDED) 共享庫:[libc++.so]0x0000000000000001 (NEEDED) 共享庫:[libc.so]0x0000000000000001 (NEEDED) 共享庫:[libm.so]0x0000000000000001 (NEEDED) 共享庫:[libdl.so]
otool
命令用于調(diào)試和分析可執(zhí)行文件和共享庫。
<2>.objdump命令
在Linux平臺上,objdump
是一個非常有用的命令行工具,用于反匯編目標(biāo)文件。它可以對可執(zhí)行文件、共享庫和目標(biāo)文件進行靜態(tài)反匯編,以便查看其二進制代碼的詳細信息。objdump
提供了各種選項,可以用于分析目標(biāo)文件、查看符號表、顯示程序入口點、反匯編代碼以及更多。
以下是一些常用的objdump
命令選項和作用:
-
objdump -d <filename>
:對目標(biāo)文件進行反匯編,顯示其二進制代碼和匯編指令。 -
objdump -t <filename>
:顯示目標(biāo)文件的符號表,包括函數(shù)、變量和節(jié)等信息。 -
objdump -r <filename>
:顯示目標(biāo)文件的重定位表,展示代碼和數(shù)據(jù)的重定位信息。 -
objdump -x <filename>
:顯示目標(biāo)文件的所有頭部信息,包括段、節(jié)和其他文件頭信息。 -
objdump -S <filename>
:將源代碼和反匯編代碼以交叉的方式顯示,方便進行源碼和匯編代碼的對比。
objdump
用于軟件調(diào)試、逆向工程和軟件安全分析。
# objdump -p libstagefrighthw.so | grep -i needNEEDED libutils.soNEEDED libcutils.soNEEDED liblog.soNEEDED libc++.soNEEDED libc.soNEEDED libm.soNEEDED libdl.soVERNEED 0x0000000000000530VERNEEDNUM 0x0000000000000003
<3>.Mac OS平臺工具:otool
在Mac OS平臺上,otool
命令用于分析可執(zhí)行文件、共享庫和內(nèi)核擴展。它可以提供關(guān)于這些二進制文件的信息,包括文件的結(jié)構(gòu)、依賴關(guān)系和符號表等內(nèi)容。以下是otool
命令常用的選項和作用:
-
otool -h
:顯示可執(zhí)行文件或共享庫的文件頭信息,包括文件類型、可執(zhí)行文件的入口點等。 -
otool -l
:顯示二進制文件的加載命令信息,包括依賴的動態(tài)庫、段和節(jié)的信息等。 -
otool -L
:顯示二進制文件依賴的動態(tài)庫和其對應(yīng)的路徑。 -
otool -tV
:顯示二進制文件的文本節(jié)(Text Section)的內(nèi)容,其中包含了可執(zhí)行代碼。 -
otool -d
:顯示共享庫的動態(tài)鏈接信息,包括其他共享庫的引用。 -
otool -arch
:指定CPU架構(gòu),可以用于查看特定架構(gòu)的二進制文件信息。
# otool -L xxx.dylib
3.如果以上三種命令沒有滿足你的需求:請繼續(xù)往下看
###<4>.strings命令
Linux中的strings
命令用于在一個文件中查找并打印可打印字符序列。它的主要作用是從二進制文件中提取文本信息,例如從可執(zhí)行文件或庫文件中提取字符串常量。
# strings libstagefrighthw.so |grep .so
liblog.so
libc.so
libdl.so
libutils.so
libcutils.so
libc++.so
libm.so
libstagefrighthw.so
libOmxCore.so