本文记录下二进制重排的常见操作手法
本文采集函数调用的方法是 clang 插桩
clang 插桩可以搞定:
Obj - C 的匿名函数 Block
Swift 代码方法
自定义的 C 函数 / 系统的 C 函数
我们的 / 系统的 Obj - C 方法
因为 clang 编译我们的代码,生成 IR 的过程中,
会有 AST 抽象语法树,方便处理调用相关
本文例子是 MJRefresh 的 demo, 针对的是 Obj - C 项目
背景简述
( 网上资料很多 )
操作系统存在 page fault, 一次 page fault ,约 4 ms, 用户无感知
app 启动的时候,发生了大量的 page fault, 用户易感知
感觉启动方法的默认编译顺序
使用 link map
- 看下面的符号
这个是默认的链接顺序,可看出于调用顺序无关
Address Size File Name
0x100005B5C 0x0000008C [ 1] -[MJRefreshBackFooter willMoveToSuperview:]
0x100005BE8 0x00000340 [ 1] -[MJRefreshBackFooter scrollViewContentOffsetDidChange:]
…
- 获取 link map
Xcode 内设置
</