[单片机]反汇编工具objdump的使用简介 查看:3328  回复:3

反汇编的原理&为什么要反汇编

arm-linux-objdump -D led.elf > led_elf.dis

objdump是gcc工具链中的反汇编工具,作用是由编译链接好的elf格式的可执行程序反过来得到汇编源代码

-D表示反汇编 > 左边的是elf的可执行程序(反汇编时的原材料),>右边的是反汇编生成的反汇编程序

反汇编的原因有以下:

1.逆向破解。

2.调试程序时,反汇编代码可以帮助我们理解程序(我们学习时使用objdump主要目的是这个),尤其是在理解链接脚本、链接地址等概念时。

3. 把C语言源代码编译链接生成的可执行程序反汇编后得到对应的汇编代码,可以帮助我们理解C语言和汇编语言之间的对应关系。非常有助于深入理解C语言。

反汇编文件的格式和看法

(汇编 assembly   反汇编 dissembly)

标号地址、标号名字、指令地址、指令机器码、指令机器码反汇编到的指令

扩展:ARM汇编中用地址池方式来实现非法立即数

初识指令地址

下载烧录执行的bin文件,内部其实是一条一条的指令机器码。这些指令每一条都有一个指令地址,这个地址是连接的时候ld给指定的(ld根据我们写的链接脚本来指定)

展望:反汇编工具帮助我们分析链接脚本

反汇编的时候得到的指令地址是链接器考虑了链接脚本之后得到的地址,而我们写代码时通过指定连接脚本来让链接器给我们链接合适的地址。

但是有时候我们写的链接脚本有误(或者我们不知道这个链接脚本会怎么样),这时候可以通过看反汇编文件来分析这个链接脚本的效果,看是不是我们想要的,如果不是可以改了再看。


经过实验:


如果Makefile 地址为0X0那么生成的led.elf 文件地址为0x8000


其他就按设定地址 如0X300 那么生成的led.elf 文件地址为0x300


image.png

image.png

image.png

image.png


image.png

image.png

image.png

当前第1页/总1页
ICP备案证书号: 苏ICP备14003016-2号