ELF檔案檢視利器之readelf用法
Android在NDK開發工具中提供了readelf,用來幫助開發者檢視編譯後目標檔案的組成結構和具體內容。
常用的有以下幾個功能選項:
1)-h或者--file-header
顯示在ELF檔案頭裡包含的所有資訊,例如:
同樣是顯示ELF檔案頭的資訊,readelf比objdump要詳細的多。
2)-l或者--program-headers或者--segments
顯示程式頭表資訊,包擴有幾個段,每個段的屬性,以及每個段中包含有哪幾個節(Section)例如:
3)-S或者--section-headers或者--sections
顯示節區表內的所有資訊,包括每個節的屬性,注意這裡是用的是大寫的“S”,例如:
4)-t或者--section-details
用來顯示所有節的詳細資訊,感覺上但從資訊量上來說,和前面的“-S”沒有什麼大的不同,例如:
5)-e或者--headers
顯示所有頭的資訊,包括ELF檔案頭、程式頭和節頭,也就是“-h -l -S”的組合。
6)-s或者--syms或者--symbols
顯示符號表的資訊,包含靜態符號表(.symtab)和動態符號表(.dynsym),例如:
如果只關心動態符號表,可以直接使用“--dyn-syms”。
7)-r或者--relocs
顯示所有重定位入口的資訊,例如:
8)-d或者--dynamic
顯示動態節區的內容,例如:
9)-x或者--hex-dump=<number|name>
顯示某個節區的二進位制碼,具體哪個節可以用該節的編號或者名字來指定,例如“-x .text”:
總體看來,就察看ELF內容來說,readelf和objdump在很多方面還是非常相似的,可以互補。
但是如果想看ELF檔案中的彙編程式碼,還是objdump更強一點。