程序员自我修养-目标文件

目标文件格式
windows下的exe、.dll、.lib和linux下的ELF、.so、.a都是按照可执行文件格式储存。
目标文件包含内容
在这里插入图片描述

代码段:.text .code,存放编译后的机器指令
数据段:.data,全局变量和局部静态变量存放
bss段:.bss为初始化的全局变量和局部静态变量预留位置
// 文件头:包含一个段表
程序源代码编译后分成两种段,程序指令和程序数据,代码段属于程序指令,数据段和bss段属于程序数据。
程序指令和程序数据分开的三个原因
1)指令区域是只读的,可以防止指令被有意或者无意改写
2)提高缓存命中率,分离有利于提高程序局部性
3)程序运行多个副本时可以内存共享
使用objdump查看目标文件结构和内容
objdump -h xxxx可以把ELF关键段信息打印出来
在这里插入图片描述

只读数据段(.rodata)注释信息段(.comment) 堆栈提示段(.note,GNU-stack)
.rodata程序里面只读变量和字符串常量

猜你喜欢

转载自blog.csdn.net/qq_30727593/article/details/121681291