小言_互联网的博客

计算机系统之可重定位目标文件探究

333人阅读  评论(0)

计算机系统之可重定位目标文件探究

以运行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文件的一些小小的探究,有什么不正确的地方,还望大家多多指教。


转载:https://blog.csdn.net/web_xiao_bai/article/details/101716762
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场