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)、运行地址得理解估计是错得,等后面厉害了,再来更新相关的概念吧!
参考资料:
本文深入讲解了objdump工具的两大核心功能:反汇编及查看目标文件段信息。通过实例展示了如何使用objdump进行反汇编,包括指定CPU架构进行反汇编的方法,以及如何查看目标文件中的详细段信息,解释了虚存地址、加载地址和运行地址的概念及其在不同环境下的应用。
1379

被折叠的 条评论
为什么被折叠?



