readelf命令,主要3招:
readelf -l object
或readelf —segment object
—— 查段信息,探索程序的空间布局。readelf -s object
或readelf —section object
—— 看各部分细节,了解程序的结构。readelf -h
—— 查看ELF文件头。
变身可执行文件,就像CISO一样:
- .c文件预处理后变.i文件。
- .i文件编译成.s文件,就是那个ASCII的汇编文本。
- .s文件经汇编成.o文件,即可重定位目标文件。
- .o文件最终通过链接器ld变成program,也就是可执行文件。
Segment和Section怎么分?
简单说,Section在汇编里标记代码块起始;而Segment是链接器ld打包好的Section。
segment可以理解成,是打包好的section。因为在链接器(ld)合成可执行过程中,ld操作了各个目标文件中的具有相同特性的section都整理成同一个segment
程序核心由.text(只读)、.data(可读写)、.bss(可读写)三大段组成。
最后,Head(堆)和Stack(栈)是程序的基础,而栈的特点是”后进先出”,地址往下减小