交叉编译工具的使用

本文介绍了嵌入式开发中的交叉编译概念,强调了在不同架构间编译执行的重要性。讲解了几个关键工具:size用于查看目标文件大小,nm用于列出文件符号,strip用于删除不必要的符号以节省空间,objdump用于反汇编,objcopy用于将ELF文件转换为BIN文件。这些工具在资源有限的嵌入式环境中至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念
什么是交叉编译?
交叉编译就是编译和执行是不在同一个地方的。
在这里就是指我在我的电脑的Uboot上编译文件。
但是我在开发板上执行文件。
交叉编译工具的作用就是
我在电脑上如果直接用系统自带的编译器的话那么编译出来的可执行文件肯定是x86架构下的,
你x86下的执行文件在我arm架构下肯定就执行不了啊,肯定就不能用啊。架构都不一样(EG:我写了一个‘+’在x86架构下被编译成的机器码是1001,如果放到arm架构下运行,1001在我这里的意思就变成了减。NONON0!!)
这就是交叉编译的概念所以我们需要使用到交叉编译工具。
————————————————————
最常用的就是GCC这个不讲。
在这里插入图片描述
一、size
打印目标文件的大小

在这里插入图片描述
text:表示代码段的大小
data:代表全局变量的大小
bss :代表未定义的全局变量的大小
dec:代表总的大小,但不是表示总的文件大小。

二、nm
把文件中的符号都打印出来。
这里的符号表示指=-+%$。。。这些符号,而是像,main Delay。。。这样的不会被执行的符号。
在这里插入图片描述
是一些被编译的汇编符号,包括链接库里面的符号。

三、strip
(脱衣,瘦身工具)
为什么这里特别注明对于嵌入式开发,这个很重要呢?
它的作用:
我们的上一个命令介绍的是打印符号的信息,而对于我们来说,这个符号在程序里面又不执行,而且又很占空间。我们嵌入式开发肯定要对空间资源把握到极致,所以
它的作用就是把对我们来说作用不大的符号给删了。
在这里插入图片描述
四、OBJDMP
反汇编工具,由于我们的汇编代码和二进制代码是一一对应的。我们就可以利用反汇编把一个二进制的可执行文件转化成汇编。
反汇编还有一个前提,你要用它相同架构的反汇编工具链。

	这个技术很牛逼啊。汇编学的好就可去但破解东西了。
	比如我们要改王者荣耀的一个英雄技能。我们肯定是拿不到源码的,麻花疼它能给你?
	但是我们下载的应用就是一个二进制可执行文件,如果你足够牛逼,利用这个反汇编就可以改东西,到时候就买破解软件赚钱,然后终身免费的牢饭就来了。
	南山必胜客。

五、OBJcopy
作用:把elf文件转化成bin文件。
方法其实很简单
在这里插入图片描述
把ELF文件代码段和文件段复制一下就可以了,
这样就变成了裸机开发的bin文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值