iOS安全攻防(十八)看懂mach-o(3)
之前兩篇帖子分別講了mach-o的header區和load command區中的segment,今天繼續講segment中的的setcion,一般在__TEXT和__DATA段中有section。這裡注意下命名規範,大寫代表segment,小寫是section,例如 __TEXT.__text,指的是__TEXT段的__text節。
先看section結構定義:
再看hopper中的__TEXT.__text 描述:
根據結構定義依次分析:
1.sectname 例子中是__text ,就是主程式程式碼
2.segname 該section所屬的 segment名,例子中是__TEXT
3.addr 該section在記憶體的啟始位置,例子中值是0xb268,跳轉到該位置看下,hopper的註釋也非常好,看下圖:
4.size 該section的大小
5.offset 該section的檔案偏移,根據例子中上下文,檔案開始於0x4000位置,offset大小是0x7268,這樣就得出絕對位置是0x4000+0x7268,和之前addr的值是一樣。
6.align 位元組大小對齊
7. reloff 重定位入口的檔案偏移
8.nreloc 需要重定位的入口數量
9.flags 包含section的type和attributes,具體看loader.h。
結構中的最後2項保留用。
以下是__TEXT段的section
__text 主程式程式碼
__stubs 和__stub_helper 用於動態連結庫的stub
__cstring c語言字串
__const const修飾的常量
__objc_methname objc的方法名稱
__objc_methtype objc方法型別
__objc_classname objc類方法
以下是__DATA段的section
__objc_ivars objc類的例項變數
__objc_classlist objc類列表
__objc_protolist
__objc_imageinfo objc映象資訊
__objc_const objc常量
__objc_selfrefs objc自引用(self)
__objc_protorefs objc協議引用
__objc_superrefs objc超類引用
__cfstring 使用Core Foundation字串
__bss BSS
至此,一共3篇“看懂mach-o” ,讓我們瞭解mach-o的佈局,最後看下hopper中分析出來的segment和section列表。