iOS安全攻防(十七)看懂mach-o(2)
接上一篇看懂mach-o(1),本文繼續講緊隨mach-o的header檔案的load command載入命令,看下面2張圖,分別是hopper中顯示的第一個load command區域和segment_command的定義:
第一張圖擷取的是第一個load command,從第一張圖所知道,cmd型別是segment_command,就是截圖的第2張圖,依次分析:
1.cmd 是load command的型別,本文中值=1就是LC_SEGMENT,,LC_SEGMENT的含義是(將檔案中的段對映到程序地址空間)
2.cmdsize 代表load command的大小(0x38個位元組,從0x401C-0x4053)。
3.segname 16位元組的段名字,當前是__PAGEZERO,有以下幾種段:
#defineSEG_PAGEZERO"__PAGEZERO"/* the pagezero segment which has no */
/* protections and catches NULL */
/* references for MH_EXECUTE files */
#defineSEG_TEXT"__TEXT"/* the tradition UNIX text segment */
#defineSEG_DATA"__DATA"/* the tradition UNIX data segment */
#defineSEG_OBJC"__OBJC"/* objective-C runtime segment */
#defineSEG_ICON "__ICON"/* the icon segment */
#defineSEG_LINKEDIT"__LINKEDIT"/* the segment containing all structs */
/* created and maintained by the link */
/* editor. Created with -seglinkedit */
/* option to ld(1) for MH_EXECUTE and */
/* FVMLIB file types only */
#define SEG_IMPORT"__IMPORT"/* the segment for the self (dyld) */
/* modifing code stubs that has read, */
/* write and execute permissions */
4.vmaddr 段的虛擬記憶體啟始地址
5.vmsize 段的虛擬記憶體大小
6.fileoff 段在檔案中的偏移量
7.filesize 段在檔案中的大小
8.maxprot 段頁面所需要的最高記憶體保護(4=r,2=w,1=x)
9.initprot 段頁面初始的記憶體保護
10.nsects 段中包含section的數量
11.flags 其他雜項標誌位
本文中主要講了segment的種類和其結構,下一篇講__DATA和__TEXT下面的sections。