objdump

1 objdump

1.1 反汇编

反汇编文件: objdump -d func.o
在这里插入图片描述

反汇编文件,并查看汇编到源码的映射: objdump -S func.o 。编译时需要给出-g,即需要调试信息。另外需要注意,这个时候我们是不能将源文件也就是func.c删除的,否则将不能显示汇编语句对应的C代码。
在这里插入图片描述
我们还可以使用-M选项,用来指明CPU架构(跟汇编风格有关),比如objdump -d -M intel -S main.o

1.2 查看目标文件中的详细段信息

查看目标文件中的详细段信息: objdump -h test.out

在这里插入图片描述
objdump -h的输出说明:
在这里插入图片描述
可执行程序是如何加载到内存中的?
三个重要的概念:虚存地址(VMA)、加载地址(LMA)、运行地址

桌面环境 :test.out(可执行文件),执行test.out会为其创建一个进程。首先会分配虚存,然后将相应的段加载到段所对应的虚存地址,这个虚存地址是在编译时确定的。这个虚存地址也就是加载目标地址,是终点的地址,简称加载地址。 最后执行应用程序。运行地址是指实地址。

嵌入式环境:源代码交叉编译得到test.bin,然后烧写到device的flash中。当flash为nandflash时,由于nand flash 只能存储代码不能执行代码,所以需要将代码从flash加载到ram中。 从flash的地址将代码拷贝到ram中,这个地址就叫加载地址,指的是起点。vma不等于lma ,这里的运行地址为实地址;当flash为norflash时, 代码可以直接在norflash中执行, 加载地址就是运行地址,虚存地址可能没有。

上面对于虚存地址(VMA)、加载地址(LMA)、运行地址得理解估计是错得,等后面厉害了,再来更新相关的概念吧!


参考资料:

  1. 嵌入式操作系统原理课
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值