Mach-O 文件中的Segement
Mach-O 文件中的虚拟地址最终会映射到物理地址上。这些地址被分成不同的Segement:
-
__TEXT段
:包含 Mach header,被执行的代码和只读常量(如C 字符串),只读可执行(r-x)
-
__DATA段
:包含全局变量,静态变量等,可读写(rw-)。
-
__LINKEDIT段
:包含了加载程序的元数据,比如函数的名称和地址,只读(r–).
__TEXT段中的 Section
字段 |
说明 |
__text |
代码节,存放机器编译后的代码 |
__stubs |
用于辅助做动态链接代码(dyld) |
__stub_helper |
用于辅助做动态链接 |
__objc_methname |
objc的方法名称 |
__cstring |
代码运行中包含的字符串常量,例:#define kKey @"123",123会存在这个区里 |
__objc_classname |
类名 |
__objc_methtype |
方法类型 |
__const |
存储const修饰的常量 |
__DATA段中的 Section
字段 |
说明 |
__got |
存储引用符号的实际地址,类似于动态符号表 |
__la_symbol_ptr |
lazy symbol pointers。懒加载的函数指针地址。配合__stubs和stub_helper使用。 |
__mod_init_func |
模块初始化的方法 |
__const |
存储constant常量的数据。比如使用extern导出的const修饰的常量。 |
__cfstring |
Core Foundation 字符串 |
__objc_classlist |
OC类列表和类信息,映射了__objc_data的地址 |
__objc_nlclslist |
OC 的 +load 函数列表,比 __mod_init_func 更早执行 |
__objc_catlist |
categories |
__objc_nlcatlist |
categories的+load`函数列表 |
__objc_protolist |
协议列表 |
__objc_imageinfo |
镜像信息 |
__objc_const |
OC常量。保存objc_classdata结构体数据。用于映射类相关数据的地址,比如类名,方法名等 |
__objc_selrefs |
引用的 OC 方法 |
__objc_protorefs |
引用的 OC 协议 |
__objc_classrefs |
引用的 OC 类 |
__objc_superrefs |
引用的 OC超类 |
__objc_ivar |
ivar指针 |
__objc_data |
用于保存类需要的数据。最主要的内容是映射__objc_const地址,找到类的相关数据。 |
__data |
存放了协议和已经初始化的静态量 |
__bss |
存储未初始化的静态量 |
__common |
存储导出的全局的数据 |
本文标题:Mach-O 文件中的Segement
本文链接:https://www.haomeiwen.com/subject/wxebtltx.html
网友评论