4:MachO文件

复习

1:macho文件

2:通用二进制文件

3:macho文件格式

4:dyld加载流程

目录

1:macho文件

2:通用二进制文件

3:macho文件格式

4:dyld加载流程

正文

一:macho文件】

1:mach-O文件

4:MachO文件

dylib:动态库

dyld:  动态连接器

Dysm:具有调试信息的符号信息

 

2:通用二进制文件、可执行文件。

1:CPU指令集

指令集对应的机型:
2019:
2018: A12芯片arm64e : iphone XS、 iphone XS Max、 iphoneXR
2017: A11芯片arm64: iPhone 8, iPhone 8 Plus, and iPhone X
2016: A10芯片arm64:iPhone 7 , 7 Plus, iPad (2018)
2015: A9芯片arm64: iPhone 6S , 6S Plus
2014: A8芯片arm64: iPhone 6 , iPhone 6 Plus
2013: A7芯片arm64: iPhone 5S
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

模拟器32位处理器测试需要i386架构,
模拟器64位处理器测试需要x86_64架构,
真机32位处理器需要armv7,或者armv7s架构,
真机64位处理器需要arm64架构。

 

2:通用二进制文件”或“ Fat Binaries“胖二进制文件。

根据支持的目标设备和操作系统版本改变。

通用二进制文件可以,在iOS,tvOS和watchOS上,还可以在Simulator中运行。

 

3:通用二进制文件

4:MachO文件

4:查看可执行文件

4.1:查看可执行文件

lipo  -info ***

***是可执行文件的名字

 

4.2:拆分可执行文件

lipo *** -thin armv7 -output ***_armv7

***  是原有的可执行文件的名字

***_armv7  是拆分后的可执行文件的名字。

 

4.3:合并可执行文件

lipo -create ***_armv7 ***_arm64 -output  ***_demo

***_armv7

***_arm6

是两个拆分的可执行文件

***_demo是合并后的可执行文件。

 

二:Macho文件格式

4:MachO文件

1:header:

4:MachO文件

 

2:loadCommands 

4:MachO文件

LC_DYLD_INFO_ONLY:动态链接

  重定向、绑定、弱绑定、懒加载绑定、对外开发。

LC_DYSYMTAB:动态符号表地址。(这部分之系统内核加载的。之后是动态连接器加载的)

LC_LOAD_DYLINKER:动态连接器

LC_MAIN: 程序入口

LC_ENCRYPTION_INFO:加密信息

 

三:dyld: 动态链接器

DYLD:流程图:函数调用栈

dyld 加载所有的库和可执行文件信息。

1:程序是从_dyld_start开始

2:进入dyld:main函数

  2.1:配置环境:配置DYLD_PRINT_OPTS  环境变量,RUN->Arguments-> EnvironmentVariables。

    DYLD_PRINT_OPTS 1

    DYLD_PRINT_ENV  1

  2.2:加载共享缓存库

  2.3:实例化主程序   

    加载mach-o文件 

  2.4:加载动态库

  2.5:链接主程序、

  2.6:符号绑定

  2.7:初始化主函数(最关键的)

    2.7.1:经过一系列初始化函数后是:notifySingle函数

        执行一个回调。

        通过断点调试,执行一个回调,回调函数是被objc_init初始化时赋值的一个函数loadImage

        objc_init

        loadImage

        callloadMethods:循环遍历各个类的load方法

        callclassLoads:

 

    2.7.2:doModInitFunction函数

        调用全局C++对象的构造函数带有__Sttribute__((constructor))的c函数。

    2.7.3:返回主程序的入库函数。 main函数。

注意

load方法

c++构造函数

main函数

引用

iOS逆向攻防之了解MachO文件

4:MachO文件

上一篇:OS第6次实验报告:使用信号量解决进程互斥访问


下一篇:数据库的本质、概念及其应用实践