Mach-o文件详解

2023-11-22  本文已影响0人  孙健会员

Mach-O文件格式

image.png

Header

image.png

Load Commands

load commnads紧跟在header之后,告诉内核和dyld,如何将App运行所需要的资源加载入内存中。比如main函数的加载地址,动态链接器dyld的文件路径,以及相关依赖库的文件路径,还有Data中的Segment如何加载入内存。


image.png

LC_SEGMENT_64(_PAGEZERO)是一个特殊的Segment,这个Segment其实是苹果虚拟出来的,只是一个逻辑上的段,而在Data中,根本没有对应的内容,也没有占用任何磁盘空间。LC_SEGMENT_64(_PAGEZERO)在VM中被置为Read only,逻辑上占用APP最开始的一段内存空间,用来处理空指针。由上图可以看到其vm size是4294967296字节 = 4GB,但是其真正的物理地址File size和File offset都是0。

LC_LOAD_DYLIB

在 Load Commands 里,有很多 LC_LOAD_DYLIB 命令,用来加载动态库,包括系统动态库和我们自己添加的动态库


image.png

__TEXT

image.png

__DATA

image.png
上一篇下一篇

猜你喜欢

热点阅读