一、概念
什么是交叉编译?
交叉编译就是编译和执行是不在同一个地方的。
在这里就是指我在我的电脑的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文件。