当前位置: 首页 > article >正文

【GNU】反汇编工具objdump

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 0x0000000000401000

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         00000017  0000000000401000  0000000000401000  00001000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000008  0000000000402000  0000000000402000  00002000  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000004  0000000000403000  0000000000403000  00003000  2**2
                  ALLOC

3.2 查看 ELF 文件中的段信息

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

3.3 反汇编 ELF 文件中的代码

objdump -d program.elf
Disassembly of section .text:

0000000000401000 <_start>:
  401000:   48 31 c0                xor    %rax,%rax
  401003:   48 31 ff                xor    %rdi,%rdi
  401006:   48 c7 c7 00 00 00 00    mov    $0x0,%rdi
  40100d:   b8 3c 00 00 00          mov    $0x3c,%eax
  401012:   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.kler.cn/a/403806.html

相关文章:

  • 【前端知识】Javascript前端框架Vue入门
  • C/C++中有符号的类型、无符号类型之间的转换
  • 接口性能优化的技巧
  • ROS2指令总结(跟随古月居教程学习)
  • [Unity]游戏开发基础2- 从草图到最小可用产品:视频游戏创作阶段详解
  • 脚手架vue-cli,webpack模板
  • 2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--PCF8591(八)
  • python subprocess.run 详解
  • 力扣第58题:最后一个单词的长度
  • AI数字人视频小程序:引领未来互动新潮流
  • golang通用后台管理系统10(退出登录,注销token)
  • 程序里sendStringParametersAsUnicode=true的配置导致sql server cpu使用率高问题处理
  • 一、Docker 安装集
  • 脸书Facebook 多账号在同一设备登录且防关联的攻略!
  • Win11 24H2新BUG或影响30%CPU性能,修复方法在这里
  • k8s资源对象管理
  • Gin 框架中的表单处理与数据绑定
  • 第十九天 决策树与随机森林
  • Python循环请求接口
  • 高效协作:前后端合作规范与应对策略
  • 接口压力测试、性能测试工具
  • Python和MATLAB及Julia示例3D残差U-Net
  • Linux驱动开发(9):pinctrl子系统和gpio子系统--led实验
  • http响应码https的区别
  • PostgreSQL常用字符串函数与示例说明
  • 151页PDF | XX集团数字化转型SAP项目规划方案(限免下载)