objdump

2024-01-09 17:19
文章标签 objdump

本文主要是介绍objdump,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1 objdump
      • 1.1 反汇编
      • 1.2 查看目标文件中的详细段信息

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. 嵌入式操作系统原理课

这篇关于objdump的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587853

相关文章

linux下objdump命令用法介绍

objdump是用查看目标文件或者可执行的目标文件的构成的GCC工具 linux下objdump命令常见用法举例: objdump -x obj:以某种分类信息的形式把目标文件的数据组成输出;<可查到该文件的的所有动态库> objdump -t obj:输出目标文件的符号表() objdump -h obj:输出目标文件的所有段概括() objdump -j ./text/.d

LLVM Cpu0 新后端9 objdump readelf

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?pwd=ggu5 提取码: ggu5  这一章介绍如何生成 ELF 文件,ELF 文件是一种通用的可执行文件、目标文件和共享库与核心转储

objdump的使用

gcc命令objdump用法 arm-none-linux-gnueabi-objdump -D bld.pad-706.b0101.tl7689.nusmartQA-user_4.2_201401011136.vmlinux | less arm-none-linux-gnueabi-objdump在编译服务器的路径下。 $ gcc -o hello hello1.c -lm -O2

头歌GCC编程工具集第1关:实验工具GCC与objdump的使用

任务要求 根据提示,在右侧编辑器中显示的bytes.c文件中的 Begin-End 之间补充代码(即设置一个数组的初始值),使其与如下显示的main.c文件一起编译、生成的程序在运行时输出“SUCCESS”。 程序源文件main.c的内容如下(务必不要修改,否则无法通过测试): #include <stdio.h>extern unsigned char bytes[];int main(){

objdump命令解析

一、名称     objdump-显示目标文件的工具      二、简介        objdump [-a|--archive-headers]                [-b bfdname|--target=bfdname]                [-C|--demangle[=style] ]                [-d|--disassemble[=symbo

addr2line + objdump 定位crash问题

目录 背景 godbolt汇编工具 tombstone ARM平台汇编知识 寄存器介绍 常见汇编指令 函数入参及传递返回值过程 入参顺序 变参函数 虚函数表 典型问题分析过程 Crash BackTrace Addr2line objdump 拓展 为什么SetCameraId函数地址偏移是+40(0x28) 参考 背景 最近在做项目的过程中,

GNU Binutils之objdump

GNU Binutils之objdump                                                                     作者:makethyme   格式如下: objdump [‘-a’|‘--archive-headers’] [‘-b’ bfdname|‘--target=bfdname’] [‘-C

objdump - display information from object files

因为计算机大都是采用哈佛结构,数据和指令分开存储的的程序组织形式,因此当我门编译,汇编,连接,(符号解吸, 段的重定位)。而为了能让程序更好的被执行,最终生成的目标文件包含了足够多了信息生怕自己被歧视而不被执行。所以面对2进制的目标文件来说,我门是很难发现或者看到什么有用的信息,因此objdump这个工具的实际意义是多么的令人喜爱,只有当你要探索一个目标文件的组织形式的时候就能体会了

addr2line objdump命令使用方法

在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈地留下的程序的尸体,帮助程序员们解决了一个又一个问题。 有时配置不给力,Linux直接毁尸灭迹,没有了Core文件;又有时,刚好磁盘空间不足,Core文件写不下了。没有Core文件的时候,如何知道

看一下函数的符号表 linux,使用objdump objcopy查看与修改符号表

我们在 Linux 下运行一个程序,有时会无法启动,报缺少某某库。这时需要查看可执行程序或者动态库中的符号表,动态库的依赖项, Linux 有现成的工具可用:objdump 。 有时我们拿到一个静态库,想调用其中的函数,而某些函数作用域非全局,也可以通过修改符号来达到目的。 Linux 有现成的工具可用: objcopy 。 下面我们来看看具体怎么使用。 objdump 是 gcc 套件中用来查