计算机系统之可重定位目标文件探究
以运行main.c与sum.c文件为例:
两个c语言文件保存在虚拟机中的share/计算机系统/chap7_code目录下,使用cd share/计算机系统/chap7_code命令对main.c和sum.c进行操作。
使用gcc -c main.c sum.c命令将两个文件翻译成可重定位目标文件。
1.使用readelf -h main.o sum.o命令访问两个文件的ELF头
从上述两个文件的ELF头可知:main.o和sum.o两个重定向目标文件都是在64位(即博主)的电脑上运行的,而且都是小端运行机制,头文件中都由11节组成。
2.使用readelf -s main.o sum.o命令查看符号类型
如上图所示:在main.c文件中,属于全局变量的为array,main,其中array是定义了初始值的全局变量,储存在第三节(即.data)内,而main属于函数类型的全局变量,储存在第一节(即.text)内;而main.c内调用的sum函数虽为全局变量,但其并未在main.c中定义,因此系统无法判定其类型(即NOTYPE)。
同理可知:在sum.c文件中,只有sum函数属于全局变量,且其储存在第一节(即.data)中。
3.使用readelf -S main.o sum.o命令查看ELF头部中各节的相对位置
上图反映的是main.o的ELF头文件中各节的相对位置。
该图为sum.o在Linux系统中运行的结果,在此,其ELF头文件各节的相对位置不再做过多的赘述。
以上就是对main.c与sum.c文件的一些小小的探究,有什么不正确的地方,还望大家多多指教。