初步了解可重定位目标文件

首先,我们先来了解一下什么是可重定位目标文件,如图:在这里插入图片描述
我们看到,源文件经过翻译器处理后形成的** .o **文件 就是可重定位目标文件。
目标文件总共有三种:①共享目标文件②可执行目标文件③可重定位目标文件。
其中,③可重定位目标文件包含二进制数据和代码,可以在编译时和其它可重定位目标文件合并起来,创建一个可执行目标文件。如上图的 ld 将 main.o和sum.o以及一些必要的系统目标文件组合起来,创建了可执行目标文件prog。
而一个典型的ELF可重定位目标文件的格式如下图:
在这里插入图片描述
其中,每个“节”的意思是:
①.text :已编译程序的机器代码。
②.rodata :只读数据。
③.data :已初始化的全局和静态C变量
④.bss :未初始化的全局和静态C变量
⑤.symtab :一个符号表,存放在程序中定义和引用的函数和全局变量的信息,不包含局 部变量的条目。
⑥.rel .text :一个 .text节中位置的列表。
⑦.rel .data :被模块引用或定义的所有全局变量的重定位信息。
⑧.debug :调试符号表。
⑨.line :原始C源程序中的行号和 .text节中机器指令之间的映射。
⑩.strtab :一个字符串表,内容包括 .symtab 和debug节中的符号表。
而“节头部表”包含每个节的节名、偏移和大小。

✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂

cmu上此章节的main.c和sum.c源码如下:
在这里插入图片描述
在这里插入图片描述
✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂

我们要获取他们的.o文件的话(可在包含源文件的文件夹里看到),只用输入如下指令即可:
在这里插入图片描述
✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂
若是还想看看它们的ELF头部信息,只需输入如下指令即可:
在这里插入图片描述注意这里是.o不是.c
在这里插入图片描述
✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂

在上面,我们列出了典型的ELF可重定位目标文件的格式,如果想查看具体的“节”的信息,只要输入如下指令即可:
在这里插入图片描述
(大写S,.o文件)
在这里插入图片描述
✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂

若是想查看.o文件的符号表信息,只要输入如下指令即可:
在这里插入图片描述
(小写s,.o文件)
在这里插入图片描述

✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂✂
readelf一般用于查看ELF格式的文件信息
而指令man可以查看其它指令的参数,就像一本工具书一样。并且man有固定的输出格式:

NAME              命令名称及功能简要说明
SYNOPSIS        用法说明,包括可用的选项
DESCRIPTION     命令功能的详细说明,可能包括每一个选项的意义
OPTIONS             说明每一项的意义
FILES                   此命令相关的配置文件       
BUGS        
EXAMPLES          使用示例
SEE ALSO           另外参照   

man的基本使用操作如下:
1.查看指令:
man 需要查看的命令
在这里插入图片描述
这样我们就能看到ls的各个参数了(查看时会跳到另一个页面):
在这里插入图片描述
2. 查看时的翻屏操作:
向后翻一屏:space(空格键)   向前翻一屏:b
向后翻一行:Enter(回车键)    向前翻一行:k
查看时的查找操作:
/关键词 向后查找 n:下一个
?关键词 向前查找 N:前一个
3.退出:直接点击q键,回到原来的界面。

有关man的更多信息,可以看看这位博主的帖子:https://www.cnblogs.com/chenmingjun/p/8352478.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值