常用交叉编译工具集的使用和介绍


前言

这是使用的开发板是基于百问网的STM32MP157开发板进行测试。


交叉编译工具集的介绍

在我们安装交叉编译链的同时,也安装了我们的交叉编译工具集。也就是一些非常实用的编译工具(指令)可以帮助我们开发和调试。
如下
在这里插入图片描述
下面我们就对这些常用的工具集来进行介绍

将开发板进入到U-Boot模式

在这里插入图片描述

我这里是使用STM32MP157开发板是在开发板上电后一直按空格键进入U-Boot模式

readelf

在操作系统上,一个可执行文件不仅仅是我们编译的程序代码集合,而是至少由两部分组成,

  • 文件头信息
  • 程序正文

而不同的操作系统的头信息也自然是不同的,
Linux是ELF头,Windows是PE头。

readelf的功能就是读取Linux中文件的ELF头部的信息。
这里写一个测试程序
hello.c
在这里插入图片描述生成一个x86平台和ARM平台的可执行文件

在这里插入图片描述

readelf测试

x86的Linux文件
在这里插入图片描述
arm的Linux文件
在这里插入图片描述
从上可以看出,两者的ELF头部信息是一样的,这正是Linux下可执行文件的ELF头部信息。

所以下面的arm架构的文件也可以直接使用

readelf -h build

因为只是读文件的头部信息。

验证

在这里插入图片描述
在这里插入图片描述
前16个字节完全一样。但是ELF头的大小是
64字节,也就是上面打印的信息,包括入口地址,头大小,大端小端等。

size(GNU工具)

功能;size的功能就是读取我们可执行程序中的代码段,数据段,未初始化数据段等的大小

在这里插入图片描述

bss段就是未初始化或初始化为0的全局变量。data段就是全局变量且初始化,初始化值不为0.
dec = text + data + bss:就是前面几个段的大小之和。

nm

功能:查看可执行程序的符号表
在这里插入图片描述

T:全局函数标签 main
D:全局变量区
d:被static修饰的标签,在本文件有效的标签
t:被static修饰的函数标签

strip

strip功能:剔除可执行文件中的符号表
在这里插入图片描述
在这里插入图片描述

剔除符号表以后会影响文件的执行吗?

这里以build_x86为例
在这里插入图片描述
显然并不影响程序的执行,因为符号表只是给人看的,并不会影响程序的正文内容。

strings

功能:查看可执行文件的常量字符串,就是双引号括起来的

在这里插入图片描述

objdump

功能:反汇编,查看可执行程序的汇编代码
在这里插入图片描述

objcopy

功能:将我们的代码的某些段(代码段,数据段)按照相应的格式拷贝到内存的某个地址。
用于去除一些无用信息(头部ELF信息等)

addr2line

功能:在调试中将我们第几行和哪一行出错显示出来。(一般不用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jacky~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值