nm readelf objdump objcopy 命令之间的关系

nm readelf objdump objcopy 命令之间的关系

在解析可执行文件和链接库时,经常涉及到上述命令,但之前一直没有梳理清楚这几个命令之间的关系。如下整理了

概述

objdump, readelf, nm, 和 objcopy 是 GNU Binutils 套件的一部分,它们用于处理二进制文件。

  • objdump: 这是一个能够提供各种信息的程序,包括反汇编输出、源代码交叉引用等。更具体地说,它能够读取并解析二进制文件,然后以人类可读的形式显示这些信息。例如,它可以显示出二进制文件的所有头信息,包括文件的大小、段的数量和类型等。此外,它还能显示二进制文件的每个段的内容,包括段内的机器码和对应的汇编代码。
  • readelf: 这个程序用于显示 ELF 格式文件的详细信息。相比于 objdump,它提供的信息更为详尽,包括段头、符号表、重定位条目等。这意味着,除了能够显示文件的基本信息和段内容外,readelf 还能显示出文件中的符号和重定位信息。这对于理解程序的结构和行为具有重要的价值。
  • nm: 这是一个列出二进制对象文件(如 ELF、COFF)中的符号的程序。它可以扫描文件中的符号表,然后显示出符号的值、符号的类型以及符号的名称。这对于理解程序的结构和行为也十分有用。
  • objcopy: 这个程序用于复制和翻译二进制文件的内容。它可以读取一个二进制文件,然后生成一个新的文件,新文件的格式可以与原文件不同。例如,它可以将 ELF 格式的文件转换为 COFF 格式的文件。这对于程序的移植和分发具有重要意义。

关系图

在这里插入图片描述

个人理解针对elf文件而言。
objdump > readelf > nm
objdump可以查看各种类型的二进制文件,readelf主要时查看elf格式的二进制文件,而nm 主要是查看符号表,符号表属于elf格式文件内容的一部分。
objcopy则是负责在不同类型的二进制格式文件之间进行转换

介绍各个命令的典型使用场景

nm

-n 选项以地址的方式排列,而不是默认以 alphabet 字母顺序排序

	$nm -n -l -C a.out

                 w _ITM_deregisterTMCloneTable
00000000000004f0 T _init
0000000000000540 T _start
0000000000000570 t deregister_tm_clones
00000000000005b0 t register_tm_clones
0000000000000600 t __do_global_dtors_aux
0000000000000640 t frame_dummy
000000000000064a T main
00000000000006a0 T __libc_csu_init
0000000000000710 T __libc_csu_fini
0000000000000714 T _fini
0000000000000720 R _IO_stdin_used
000000000000072c r __GNU_EH_FRAME_HDR
000000000000086c r __FRAME_END__
0000000000200db8 t __frame_dummy_init_array_entry
0000000000200db8 t __init_array_start
0000000000200dc0 t __do_global_dtors_aux_fini_array_entry
0000000000200dc0 t __init_array_end
0000000000200dc8 d _DYNAMIC
0000000000200fb8 d _GLOBAL_OFFSET_TABLE_
0000000000201000 D __data_start
0000000000201000 W data_start
0000000000201008 D __dso_handle
0000000000201010 D __TMC_END__
0000000000201010 B __bss_start
0000000000201010 D _edata
0000000000201010 b completed.7698
0000000000201018 B _end

readelf

readelf网上相关的资料很多,这里仅举一个常见的例子,不做赘述,后续以单独的文章整理

	readelf -a a.out ## 显示所有信息,-a --all               Equivalent to: -h -l -S -s -r -d -V -A -I
	

objdump

	objdump --help 
	 At least one of the following switches must be given:
	 The following switches are optional:
	选项分为两类,必须选项和可选选项。

作为必选选项

-f example命令,如果你想查看一个名为example的ELF文件的头部信息
-h example命令,如果你想查看该文件的节区头部信息
-d example命令,如果你想看到文件的反汇编输出
-x或-all-headers:显示所有头部信息,包括文件头、节区头、符号表头等。
-d或-disassemble:反汇编.text节区。
-s或-full-contents:显示所有节区的完整内容。

objdump查看elf格式文件的头部信息。

	$ objdump -f a.out
a.out:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0000000000000540

objdump和readelf的差异如下:

objdump 主要用于显示二进制文件的各种信息,包括反汇编输出,头信息等。它的输出更为简洁,适用于需要快速理解二进制文件基本信息和结构的场景。
而 readelf 则提供了更为详细和深入的信息,包括段头、符号表、重定位条目等。它更适用于需要深入理解和分析 ELF 文件结构和行为的场景,例如进行二进制文件分析和调试。

objdump查看纯二进制格式文件

	objdump -b binary -m arm -D your_file

因为二进制BIN文件是一种更通用的二进制文件格式,它并没有特定的文件结构。BIN文件通常包含了纯粹的二进制数据,而无法提供ELF文件中包含的元数据。因此,BIN文件可以用于各种目的,包括固件更新,系统映像等。

需要通过-m 指定架构类型,架构类型需要提前在elf格式类型下进行确认。即下面的architecture 指定

$ objdump -f a.out

a.out:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0000000000000540

如下可得到二进制的结果。

	objdump -b binary -m i386:x86-64 -D a.out

a.out:     file format binary


Disassembly of section .data:

0000000000000000 <.data>:
   0:   31 ed                   xor    %ebp,%ebp
   2:   49 89 d1                mov    %rdx,%r9
   5:   5e                      pop    %rsi
   6:   48 89 e2                mov    %rsp,%rdx
   9:   48 83 e4 f0             and    $0xfffffffffffffff0,%rsp
   d:   50                      push   %rax
   e:   54                      push   %rsp


objcopy

	objcopy -O binary -j .abc $< $(OUT_PATH)/abc.bin;

示例为makefile中的objcopy语句,将来源文件中的 .abc段作为输入段,输出到二进制格式的abc.bin中。

-I或 -input-target:指定输入文件的格式。如果未指定此选项,objcopy将尝试自动确定输入文件的格式。

-O或 -output-target:指定输出文件的格式。如果未指定此选项,objcopy将默认输出格式与输入格式相同。

-B或-binary-architecture:当输入文件是二进制文件时,此选项用于指定目标架构。

-j或–only-section选项用于指定只复制输入文件中的特定段到输出文件。这个选项可以多次使用,每次指定一个要复制的段名。例如,objcopy -j .text -j .data inputfile outputfile将只会复制.text和.data段。如果没有使用此选项,objcopy将复制输入文件的所有段。

-strip-debug:删除所有的调试信息,从而减小输出文件的大小。

-rename-section oldname=newname:重命名一个节区。

-remove-section=sectionname:删除指定的节区。

objcopy -O 支持多种格式,包括:

  • a.out:Unix的标准二进制文件格式
  • COFF:Common Object File Format,常见对象文件格式
  • ELF:Executable and Linkable Format,可执行和链接格式
  • srec:Motorola S-Records
  • ihex:Intel Hex
  • binary:纯二进制格式
  • te pe:TE/PE,Windows的可执行文件格式

参考链接

https://blog.csdn.net/u014608280/article/details/81948141

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/418197.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Opencv基础与学习路线

Opencv Opencv每一篇目具体&#xff1a; Opencv(1)读取与图像操作 Opencv(2)绘图与图像操作 Opencv(3)详解霍夫变换 Opencv(4)详解轮廓 Opencv(5)平滑处理 具体Opencv相关demo代码欢迎访问我的github仓库&#xff08;包含python和c代码&#xff09; demo代码 文章目录 Opencv一…

数学建模【分类模型】

一、分类模型简介 本篇将介绍分类模型。对于二分类模型&#xff0c;我们将介绍逻辑回归&#xff08;logistic regression&#xff09;和Fisher线性判别分析两种分类算法&#xff1b;对于多分类模型&#xff0c;我们将简单介绍SPSS中的多分类线性判别分析和多分类逻辑回归。 分…

2024.2.29

TCP通信模型 代码&#xff1a; #include <myhead.h> #define SER_IP "192.168.153.128"//服务器ip #define SER_PORT 8080//服务器端口号int main(int argc, const char *argv[]) {//创建用于监听的套接字int sfd-1;sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd…

C#使用iText7给PDF文档添加书签

上一篇文章将SqlSugar官网文档中每个链接对应的网页生成独立PDF文档再合并为单个PDF文档&#xff0c;但是没有书签&#xff0c;八百多页的内容查找和跳转都不方便&#xff0c;本文学习和使用iText7给PDF文档添加多级书签。   添加多级书签分为两大步骤&#xff1a;1&#xff…

探索反距离加权的深度:一种用于地理数据分析的空间插值方法

目录 一、介绍 二、方法论 三、应用 四、优势 五、局限性 六、代码 七、结论 一、介绍 反距离加权 &#xff08;IDW&#xff09; 是一种广泛用于地理信息系统 &#xff08;GIS&#xff09; 和环境科学的空间插值技术&#xff0c;用于根据附近位置的值估计任何位置的缺失值。它的…

搜索算法(算法竞赛、蓝桥杯)--DFS迭代加深

1、B站视频链接&#xff1a;B25 迭代加深 Addition Chains_哔哩哔哩_bilibili 题目链接&#xff1a;Addition Chains - 洛谷 #include <bits/stdc.h> using namespace std; int n,d;//d为搜索的深度 int a[10005];//存储加成的序列bool dfs(int u){//搜索第u层 if(ud)r…

搜维尔科技:xsens研究与教育,为人类运动机制带来意义

推动人类运动学 运动学的精确测量——机械点、机构和系统运动的研究——对于推动当今的生物力学研究至关重要。 研究和了解人体运动机制是通过康复、预防伤害或提高运动表现来改善人们生活的关键。 生物力学研究 主要优点 1.实验室质量数据 – 适合详细分析 2.在任何情况下…

[回归指标]R2、PCC(Pearson’s r )

R2相关系数 R2相关系数很熟悉了&#xff0c;就不具体解释了。 皮尔逊相关系数&#xff08;PCC&#xff09; 皮尔逊相关系数是研究变量之间线性相关程度的量&#xff0c;R方和PCC是不同的指标。R方衡量x和y的接近程度&#xff0c;PCC衡量的是x和y的变化趋势是否相同。R方是不…

【亚马逊云新春特辑⑤】构生成式 AI 文生图工具之借助ControlNet进行AI绘画创作【生成拜年图】

文章目录 4. 生成拜年图4.1 实验环境准备4.2 图片生成 总结 4. 生成拜年图 本节将为大家演示如何使用imAgine绘图方案生成新春贺年图&#xff0c;以下呈现了几张效果图&#xff0c;祝大家龙年大吉&#xff01; Stable Diffusion (SD)是2022年发布的开源的文生图模型&#xff…

【论文综述+多模态】腾讯发布的多模态大语言模型(MM-LLM)综述(2024.02)

论文链接&#xff1a;24.02.MM-LLMs: Recent Advances in MultiModal Large Language | 国内-链接 实时网站&#xff1a;https://mm-llms.github.io 参考说明1-readpaper:https://mp.weixin.qq.com/s/ESUVe1aTYFLVJ10S9c1dBg 一、什么是MM-LLM ? 多模态大语言模型&#xff…

SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突

SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突 &#xff0c;错误如图&#xff1a; 问题原因&#xff1a;不能直接删除作业 任务&#xff0c;需要先删除计划里面的日志、删除代理作业、删除子计划以后才能删除作业。 解…

sora技术报告阅读

sora是一个在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。 需要将所有类型的视觉数据转化为统一表示的方法&#xff0c;使得能够对生成模型进行大规模训练。 Sora是一个通用的视觉数据模型&#xff0c;它可以生成不同持续时间、宽高比和分辨率的视…

Java SPI:Service Provider Interface

SPI机制简介 SPI&#xff08;Service Provider Interface&#xff09;&#xff0c;是从JDK6开始引入的&#xff0c;一种基于ClassLoader来发现并加载服务的机制。 一个标准的SPI&#xff0c;由3个组件构成&#xff0c;分别是&#xff1a; Service&#xff1a;是一个公开的接口…

模型优化_XGBOOST学习曲线及改进,泛化误差

代码 from xgboost import XGBRegressor as XGBR from sklearn.ensemble import RandomForestRegressor as RFR from sklearn.linear_model import LinearRegression as LR from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split,c…

javascript作用域编译浅析

作用域思维导图 1&#xff1a;编译原理 分词/词法分析 如果词法单元生成器在判断a是一个独立的词法单元还是其他词法单元的一部分时&#xff0c;调用的是有状态的解析规则&#xff0c;那么这个过程就被称为词法分析。 解析/语法分析 由词法单元流转换成一个由元素逐级嵌套所组…

Linux 下安装Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动&#xff1a; python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…

免费音频剪辑

在数字时代&#xff0c;音频剪辑已成为许多职业和爱好者不可或缺的技能。无论是制作播客、教育视频、还是进行广告宣传&#xff0c;高质量的音频剪辑都能为作品增色不少。今天&#xff0c;我要为大家强烈安利一款免费且功能强大的音频剪辑工具&#xff0c;它绝对是你办公桌上不…

[分类指标]准确率、精确率、召回率、F1值、ROC和AUC、MCC马修相关系数

准确率、精确率、召回率、F1值 定义&#xff1a; 1、准确率&#xff08;Accuracy&#xff09; 准确率是指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为&#xff1a; 准确率能够清晰的判断我们模型的表现&#xff0c;但有一个严重的缺陷&…

【OJ比赛日历】快周末了,不来一场比赛吗? #03.02-03.08 #11场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2024-03-02&#xff08;周六&#xff09; #4场比赛2024-03-03…

如何解决局域网tcp延迟高来进行安全快速内外网传输呢?

在当今企业运营中&#xff0c;数据的快速流通变得至关重要&#xff0c;但局域网内的TCP延迟问题却成为了数据传输的障碍。本文旨在分析局域网TCP延迟的成因&#xff0c;并探讨几种企业数据传输的常见模式&#xff0c;以及如何为企业选择合适的传输策略&#xff0c;以确保数据在…