Linux - objdump、readelf 的使用

上一篇博客里我说了:“下次一定”

在这里插入图片描述

那我们这一篇就来说说这俩方法:

前期准备:

同样的我们需要一份测试代码:

该测试代码的名称为:text.c

int gdata1 = 10;
int gdata2 = 0;
int gdata3;

static int gdata4 = 10;
static int gdata5 = 0;
static int gdata6;

int main()
{
	int ldata1 = 10;
	int ldata2 = 0;
	int ldata3;
	
	static int ldata4 = 10;
	static int ldata5 = 0;
	static int ldata6;
	
	return 0;
}

我们将该测试代码进行预编译、编译、汇编,生成 text.o 文件

同样地,我们不用一步一步 “gcc -E”、“gcc -S”、"gcc -c"最终生成 “.o” 文件;
我们可以直接通过 “gcc -c text.c” 直接进行最后一步汇编,就自动完成前面的工作;

在这里插入图片描述
如果直接对 text.o 文件进行查看(vim 指令)
在这里插入图片描述
就会看到一堆“乱码”,这个时候就要用到我们要介绍的这两个方法:

那么首先登场的就是 objdump 方法:

objdump

-是什么?

objdump :显示二进制文件信息在这里插入图片描述

常见的一些选项:在这里插入图片描述
更多详情可以参考:objdump命令

-怎么用?

我们输入指令:“objdump -h text.o”

在这里插入图片描述
我们会得到有关目标文件的各个 section 的头部摘要信息。

我们输入指令:“objdump -s text.o”

在这里插入图片描述
我们会得到指定 section 的全部内容(值),
以此可以判断该 section 段中保存了哪些变量值。

看到这里,我们差不多了解了一些目标文件的知识,
我们来简单总结一些 目标文件( text.o)的格式(在Linux下也叫做:ELF文件

首先是 ELF 文件的相关介绍:
在这里插入图片描述
接着是中间文件( text.o )的 ELF 格式:
在这里插入图片描述
再下来是可执行文件( a.out )的 ELF 格式:
在这里插入图片描述

readelf

-是什么?

readelf :用于显示 elf 格式文件信息
在这里插入图片描述
关于 ELF 文件
在这里插入图片描述
有关 readelf 命令的常用选项
在这里插入图片描述
同样的,详细选项参考readelf 命令

-怎么用?

输入命令:" readelf -h text.o "
在这里插入图片描述
我们可以看到:该命令显示了 elf 文件开始的文件头信息;
这样的话," 0x 34" 就和 " 52 "对应了起来。

输入命令:" readelf -s text.o "
在这里插入图片描述
我们可以得出结论:
全局、静态变量可以生成符号,而局部变量不可以。

那今天也就先总结到这里⑧,我们下期见。
在这里插入图片描述

参考资料

【1】objdump 命令
【2】Cheney_CHEN_JUN.VMA与LMA区别详解.CSDN.2014.04.27
【3】ELF-百度百科
【4】readelf 命令

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值