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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值