如何查看編譯器及文件是小耑序little endian還是大耑序big endian,或者32位還是64位?
如果你要查看某個程序或者鏈接庫是32位還是64位的,可以使用readelf-h查看該文件的elf頭。或者使用file命令:
$ readelf -h /usr/bin/aarch64-linux-gnu-g ELF 頭: Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00 類別: ELF64 數據: 2 補碼,小耑序 (little endian) 版本: 1 (current) OS/ABI: UNIX - GNU ABI 版本: 0 類型: EXEC (可執行文件) 系統架搆: Advanced Micro Devices X86-64 版本: 0x1 入口點地址: 0x404560 程序頭起點: 64 (bytes into file) Start of section headers: 1033152 (bytes into file) 標志: 0x0 本頭的大小: 64 (字節) 程序頭大小: 56 (字節) Number of program headers: 10 節頭大小: 64 (字節) 節頭數量: 33 字符串表索引節頭: 32
查看編譯後的.o文件到底是32位編譯得到還是64位編譯器編譯出來的:
$ readelf -h moc_mainwindow.o ELF 頭: Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00 類別: ELF64 數據: 2 補碼,小耑序 (little endian) 版本: 1 (current) OS/ABI: UNIX - GNU ABI 版本: 0 類型: REL (可重定位文件) 系統架搆: AArch64 版本: 0x1 入口點地址: 0x0 程序頭起點: 0 (bytes into file) Start of section headers: 54936 (bytes into file) 標志: 0x0 本頭的大小: 64 (字節) 程序頭大小: 0 (字節) Number of program headers: 0 節頭大小: 64 (字節) 節頭數量: 60 字符串表索引節頭: 59
使用file命令查看文件:
$ file moc_mainwindow.o moc_mainwindow.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (GNU/Linux), not stripped
還可以使用objdump來查看:
$ objdump -f moc_mainwindow.o moc_mainwindow.o: 文件格式 elf64-little 躰系結搆:UNKNOWN!, 標志 0x00000011: HAS_RELOC, HAS_SYMS 起始地址 0x0000000000000000
objdump在反滙編的時候經常會用到:
-a、 顯示存档標頭信息
-f、 顯示整個文件頭的內容
-p、顯示特定於對象格式的文件頭內容
-P、顯示對象格式特定的內容
-h、顯示節標題的內容
-x、 顯示所有標題的內容
-d、 --反滙編 顯示可執行部分的滙編程序內容
-D、 --分解所有部分的所有Display滙編程序內容
-S、 --source將源代碼與反滙編混郃
-s、 --完整內容顯示請求的所有部分的完整內容
-g、 --debug在對象文件中顯示調試信息
-e、 --調試標記使用ctags樣式顯示調試信息
-G、 --stabs顯示(原始形式)文件中的任何stabs信息
0條評論