標籤:end 開啟 section 檔案格式 ace header shel linu 版本
以下只是開發中可能用的比較多的工具,另外還有其他很多未曾提及的工具 + 生產力。
Linux篇:
1.連結過程的調試:主要用於查看構建過程;如連結時載入的動態庫以及運行時載入動態庫過程的調試
支援LD_DEBUG環境變數(glibc下提供給載入器便於調試的一個環境變數);
常用的使用方法:
LD_DEBUG=help XXX XXX可為任一字元串,即可調出協助資訊;
LD_DEBUG=libs xxx xxx為可執行二進位檔案,顯示所依賴庫的檔案路徑;
此外還可以顯示重定位、符號表、依賴庫版本匹配資訊等;
對於LD_DEBUG環境變數,可以在調用連結器命令時使用,也可以在當前終端的shell下設定環境變數如export LD_DEBUG=option;或者是在系統的環境變數下設定(不建議採用)。
2. 二進位檔案類型
1)file程式查看,如:file XXX;
2)readelf分析ELF頭資訊,如:readelf -h XXX ;其中類型:EXEC DYN REL 分別為可執行檔、共用目標檔案、可重定位檔案(如.a/.o檔案);
3)objdump分析ELF頭資訊,同readelf類似,其中類型:EXEC_P DYNAMIC 分別為可執行檔、共用目標檔案,對於目標檔案沒有顯示類型資訊。
3. 二進位檔案進入點
1)可執行檔的進入點
readelf -h XXX
或objdump -f XXX 。
2)動態庫的進入點
對於靜態載入的動態庫,一般可通過gdb調試,打斷點進而確定載入的動態庫進入點具體位置;
對於動態載入的動態庫,則只能在方法中將大量螢幕輸出重新導向進行查詢。
4. 查看匯出符號列表資訊
1) nm 程式
2) readelf程式
3) objdump程式
具體的查詢選項可查看各工具程式-help或--help選項。
5. 查看符號節、段的資訊
1) readelf程式
2) objdump程式
具體的查詢選項可查看各工具程式-help或--help選項。
6. 反組譯碼
1) 反組譯碼二進位:objdump -d/-D選項。
2) 反組譯碼啟動並執行進程:gdb調試器
7. 查看可執行檔或者共用庫載入時依賴的共用列表
1) ldd程式可查看完整依賴列表(含直接依賴庫以及依賴庫的依賴庫(或者更多間接依賴庫))
2) objdump -p或readelf -d的動態節資訊
8. 查看裝載器可找到的有效庫檔案:ldd -p
9. 查看運行時載入的動態庫連結檔案:
1) strace程式 跟蹤系統調用,如:strace -f -e open cat,即查看cat程式的open系統調用;
2) LD_DEBUG環境變數,如LD_DEBUG=files選項,如:LD_DEBUG=files gdb -q XXX;通過gdb調試打斷點以使得程式XXX執行中暫停,此時可以顯示攜帶的資訊,
另外也可以在以進程PID下的/proc/PID/maps檔案中,可查看被記錄載入的動態庫檔案;
3) lsof程式,可查看靜態或者動態載入的動態庫,此外其還可以查看普通檔案、通訊端、庫檔案、裝置檔案等開啟的情況。
10. 靜態庫建立和其他動作:ar歸檔工具,可實現目標檔案打包成靜態庫,另外還有添加、替換、刪除、提取、調整順序等操作
Windows篇:
1. 庫管理器lib.exe
類似於Linux的ar歸檔工具,此外還可以建立動態庫引入庫檔案以及解析循環相依性的exp匯出庫檔案;
1) 建立靜態庫檔案: lib.exe /OUT:XXX.lib /NOLOGO x.obj y.obj z.obj ...等
2) 此外列出、刪除、提取操作分別以/LIST /REMOVE /EXTRACT,追加操作lib.exe XXX.lib abc.obj
3) 建立動態庫匯入庫(引入庫),如通過def模組定義檔案建立引入庫lib:lib.exe /machine:x64 /def:XXX.def /out:XXX.lib
4) 事實上除了lib可以建立動態庫引入庫外,還可以直接通到dll檔案來匯出,如 dumpbin /exports XXX.dll > XXX.def
2. PE/COFF檔案格式資訊查看工具dumpbin.exe
類似於Linux的objdump工具,其可查看匯出符合、節資訊、反組譯碼資訊以及可查看靜態庫中的目標檔案等,具體使用可查看各個選項,
如:/EXPORTS 查看匯出函數 /IMPORTS 查看載入時依賴項,依賴庫和符號列表 /HEADERS 查看節資訊 /SECTION查看特定節資訊 /DISASM查看反組譯碼資訊。
3. PE模組依賴分析工具Dependency walker(depends.exe)
類似於Linux的ldd工具,可查看庫或應用程式依賴關係以及匯入、匯出函數等,部分應用程式運行異常,可通過此工具查看缺少的依賴庫;
有時候該工具都找到並添加相應依賴庫後仍然運行異常,則可結合sxstrace,查看是否缺少或是不匹配的資訊清單檔,或者是其他錯誤提示資訊。
Linux/Windows 工具 + 生產力簡記