【GNU】反汇编工具objdump

devtools/2024/11/20 14:10:15/

1、什么是 objdump

objdump 是 GNU Binutils 工具集中的一个命令行工具,用于分析和显示目标文件(如二进制文件、目标文件、静态库和可执行文件)的详细信息。它是开发调试、优化和逆向工程的利器。他可以做到:

  • 反汇编功能:将机器代码转化为汇编代码,方便开发者理解程序逻辑。
  • 文件结构解析:能够查看文件的段、头信息以及符号表。
  • 重定位信息分析:显示链接过程中符号和地址的调整信息。

2、 objdump 的命令选项详解

选项功能
-d反汇编文件中的代码段
-D反汇编整个文件
-S同时显示反汇编代码和源代码(如果目标文件中包含调试信息)
-h显示文件的节头表
-x显示文件的完整头信息
-t显示符号表
-r显示重定位条目
-s以十六进制形式显示文件的内容
-f显示文件格式信息

3、常用的功能

3.1 查看 ELF 文件的结构和基本信息

objdump -x program.elf
program.elf:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0000000000401000Sections:
Idx Name          Size      VMA               LMA               File off  Algn0 .text         00000017  0000000000401000  0000000000401000  00001000  2**4CONTENTS, ALLOC, LOAD, READONLY, CODE1 .data         00000008  0000000000402000  0000000000402000  00002000  2**3CONTENTS, ALLOC, LOAD, DATA2 .bss          00000004  0000000000403000  0000000000403000  00003000  2**2ALLOC

3.2 查看 ELF 文件中的段信息

objdump -h program.elf
Sections:
Idx Name          Size      VMA               LMA               File off  Algn0 .text         00000017  0000000000401000  0000000000401000  00001000  2**4CONTENTS, ALLOC, LOAD, READONLY, CODE1 .data         00000008  0000000000402000  0000000000402000  00002000  2**3CONTENTS, ALLOC, LOAD, DATA2 .bss          00000004  0000000000403000  0000000000403000  00003000  2**2ALLOC

3.3 反汇编 ELF 文件中的代码

objdump -d program.elf
Disassembly of section .text:0000000000401000 <_start>:401000:   48 31 c0                xor    %rax,%rax401003:   48 31 ff                xor    %rdi,%rdi401006:   48 c7 c7 00 00 00 00    mov    $0x0,%rdi40100d:   b8 3c 00 00 00          mov    $0x3c,%eax401012:   0f 05                   syscall

3.4 查看符号表

objdump -t program.elf
SYMBOL TABLE:
0000000000401000 g     F .text  0000000000000017 _start
0000000000402000 g       .data  0000000000000004 some_data

3.5 提取特定段的内容

提取 .text 段: 

objcopy --only-section=.text -O binary program.elf text_section.bin

 查看提取出的 .text 段内容:

hexdump -C text_section.bin
00000000  48 31 c0 48 31 ff 48 c7  c7 00 00 00 00 b8 3c 00  |H1.H1.H......<.|
00000010  00 00 0f 05                                       |....|

3.6 将 ELF 文件转换为纯二进制文件

objcopy -O binary program.elf program.bin

3.7 将纯二进制文件转换回 ELF 文件

objcopy -I binary -O elf64-x86-64 --binary-architecture i386:x86-64 program.bin program_rebuilt.elf

3.8 查看 ELF 文件的动态链接信息

objdump -p program.elf | grep NEEDED
  NEEDED               libc.so.6


http://www.ppmy.cn/devtools/135497.html

相关文章

01_MinIO部署(Windows单节点部署/Docker化部署)

单节点-Windows环境安装部署 在Windows环境安装MinIO&#xff0c;主要包含两个东西&#xff1a; MinIO Server&#xff08;minio.exe&#xff09;&#xff1a;应用服务本身MinIO Client&#xff08;mc.exe&#xff09;&#xff1a;MinIO客户端工具&#xff08;mc&#xff09;…

linux中的SIGPIPE信号有什么用?

信号概述 SIGPIPE是一种信号&#xff0c;信号是Unix和类Unix系统中用于进程间通信的一种机制&#xff0c;用于通知进程发生了某个特定的事件。当一个进程接收到SIGPIPE信号时&#xff0c;它表明在管道或者套接字的写入操作出现了问题。 在管道中的应用 管道原理简介&#xff1…

使用 Vue 和 Create-Vue 构建工程化前端项目

目录 前言1. 工程化的意义与 Vue 的生态支持2. 搭建 Vue 工程化项目2.1 环境准备2.2 使用 create-vue 创建项目2.2.1 初始化项目2.2.2 安装依赖2.2.3 本地运行 3. Vue 项目的目录结构解析4. Vue 开发流程详解4.1 项目入口与根组件4.1.1 main.js 的作用4.1.2 App.vue 的结构 4.2…

grafana+prometheus+windows_exporter实现windows进程资源占用的监控

grafanaprometheuswindows_exporter实现windows进程资源占用的监控TOC 一、 管理端搭建&#xff0c;采用windows版本的grafanaprometheus 管理端安装部署不做本文终端&#xff0c;简单讲解一下&#xff0c;此处采用msi的grafana安装包&#xff0c;和免安装版本的prometheus 1…

机器学习—诊断偏差和方差

给定这个数据集&#xff0c;如果在上面画一条直线&#xff0c;它做得不太好&#xff0c;我们说这个算法有很高的偏差或者它不符合这个数据集&#xff0c;或者拟合一个四阶多项式&#xff0c;然后它有很高的方差&#xff0c;或者它太合身了&#xff0c;在中间&#xff0c;如果你…

【金融风控项目-07】:业务规则挖掘案例

文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段&#xff1a; AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…

Uniapp 引入 Android aar 包 和 Android 离线打包

需求&#xff1a; 原生安卓 apk 要求嵌入到 uniapp 中&#xff0c;并通过 uniapp 前端调起 app 的相关组件。 下面手把手教你&#xff0c;从 apk 到 aar&#xff0c;以及打包冲突到如何运行&#xff0c;期间我所遇到的问题都会 一 一 进行说明&#xff0c;相关版本以我文章内为…

【学习心得】算力云平台上的大模型部署并实现远程调用

以AutoDL算力云平台为例&#xff0c;部署国产开源ChatGLM3b模型。 一、准备工作 &#xff08;1&#xff09;准备一台算力服务器 首先&#xff0c;进入AutoDL官网的算力时长选择算力服务器资源。 创建好后会自动跳转控制台的“容器实例”界面&#xff0c;稍等片刻后选择“快捷…