符号表其实就是包含字符串-地址映射关系的表格。
在Debug场景下, 符号以dwarf格式存在于.o文件中;而在Release场景下,App中的符号可以被完全裁剪,符号信息存储在dsym文件。
由于镜像会在随机的地址上加载,和之前指针指向的地址(preferred_address)会有一个偏差(slide),dyld需要修正这个偏差,来指向正确的地址。
指针修正分为两个阶段,Rebase和Bind,Rebase在前,Bind在后。
Rebase:修正镜像内部的指针,主要在镜像读入内存过程中完成,性能消耗主要是文件IO。
Bind:是设置镜像依赖的外部符号的指针,主要是工作是查询全局符号表,性能消耗主要在CPU计算。