《程序员的自我修养》笔记
目录
视频
笔记
内存分为
不可访问区域、.text、.data、.bss、堆区、共享库、.stack、内核区;全局变量、静态变量在数据段,其中已初始化并且初始化值不为
0的.data段,初始化为0或者未初始化的在.bss段,函数中的变量(即指令)放在了.text段;main函数第一个参数是命令行参数个数,第二个是命令行参数;.bss占用的是虚拟内存的空间,不占用mach-o文件的空间;mach-o的header中记录了.bss要占多少空间;mach-o中函数存的是偏移量,pc寄存器中存的是下一行指令的地址,跳转时需要用当前的指令偏移 +pc指令地址,才是我们要跳转到的函数地址;链接时只处理
mach-o文件中的global符号,不处理local符号(比如文件中的static变量);链接过程:
a. 按属性(比如
.data / .text)合并所有mach-o文件的段(即合并同名section为segment) -> 并调整段偏移和段长度 -> 合并符号表 -> 进行符号解析 -> 分配内存地址;b.由于编译过程中不会给符号分配地址,所以链接阶段要进行符号重定位(数据符号替换成真正的地址,函数符号替换成与下一行指令地址的偏移量);
