简单了解可重定位目标文件

mac2022-06-30  128

一.目标文件分类 在介绍可重定位目标文件之前我们首先要了解一下什么是目标文件分哪几种。 1.可重定位目标文件 包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件。 2.可执行目标文件 包含二进制代码和数据,其形式可以被直接复制到内存并执行。 3.共享目标文件 一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态的加载进内存并链接。 二.如何生成可重定位目标文件 使用gcc -c test.c test.c中的内容:

#include <stdio.h> int main(){ printf("hello world"); return 0; }

gcc命令: 这时文件夹中就会产生一个test.o文件如图: 这个文件就是可重定向的目标文件。 三解读可重定向目标文件 1.ELF头

ELF头含义.test已编译程序的机器代码.rodata只读数据.data已初始化的全局变量和静态c变量.bss未初始化的全局和静态c变量.symtab一个符号表,它存放在程序中定义和引用的函数和全局变量信息.rel.text一个.text节中的位置的列表.rel.data被模块引用或定义的所有变量的重定位信息.debug一个调试符号表.line原始c源程序中的行号和.text节洪机器指令之间的映射.strtab一个字符串表

2.使用readelf -S查看test.o(显示节区表内的所有信息,包括每个节的属性) 3.使用readelf -h查看test.o(显示在ELF文件头里包含的所有信息) 4.使用readelf -s查看test.o(显示符号表的信息,包含静态符号表(.symtab)和动态符号表(.dynsym))

最新回复(0)