iOS安全攻防(十七)看懂mach-o(2)

我的原創,轉帖請註明來源:cnblogs.com/jailbreakerhtml

接上一篇看懂mach-o(1),本文繼續講緊隨mach-o的header文件的load command加載命令,看下面2張圖,分別是hopper中顯示的第一個load command區域和segment_command的定義:spa

NewImage

 

NewImage

第一張圖截取的是第一個load command,從第一張圖所知道,cmd類型是segment_command,就是截圖的第2張圖,依次分析:3d

1.cmd 是load command的類型,本文中值=1就是LC_SEGMENT,,LC_SEGMENT的含義是(將文件中的段映射到進程地址空間)code

2.cmdsize 表明load command的大小(0x38個字節,從0x401C-0x4053)。htm

3.segname 16字節的段名字,當前是__PAGEZERO,有如下幾種段:blog

#defineSEG_PAGEZERO"__PAGEZERO"/* the pagezero segment which has no */進程

/* protections and catches NULL */內存

/* references for MH_EXECUTE files */ci

#defineSEG_TEXT"__TEXT"/* the tradition UNIX text segment */get

#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。

相關文章
相關標籤/搜索