前端开发环境配置
前端开发环境配置踩坑记录
前端开发环境配置踩坑记录
内存分为不可访问区域、.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.由于编译过程中不会给符号分配地址,所以链接阶段要进行符号重定位(数据符号替换成真正的地址,函数符号替换成与下一行指令地址的偏移量);