惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
爱范儿
爱范儿
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
博客园 - 聂微东
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
罗磊的独立博客
Jina AI
Jina AI

博客园 - 夏之夜

GO 学习笔记之四 工具(1)远程调试工具 dlv Shell命令集锦(一) Postgres 数据库(三)常见DDL命令 elasticsearch 学习笔记之五 备份还原开源方案比较 elasticsearch 学习笔记之四 快照 GO 学习笔记之一 环境安装 GO 学习笔记之零 (四)字符串处理集锦 GO 学习笔记之零 (三)常见问题处理集锦 GO 学习笔记之三 基础语法(5) 切片 GO 学习笔记之三 基础语法(12)文件操作 GO 学习笔记之五 编程(三)单元测试 ( VSCODE工具运行 ) GO 学习笔记之三 基础语法(11) 数据类型转换 GO 学习笔记之零 (二)git 操作(VSCODE) GO 学习笔记之零 (一)GO推荐的工程目录结构 Git 学习笔记之(六)windows 上 git 工具 安装 GO 学习笔记之二 常用命令集锦 elasticsearch 学习笔记之一 elasticdump elasticsearch 学习笔记之二 常见接口 专题(二十) cut
Linux 学习笔记之(十四)二进制分析工具
夏之夜 · 2026-04-11 · via 博客园 - 夏之夜

一、背景

      存在一个编译好的二进制可执行文件(Linux),此时需要分析它的结构或依赖库或是否含有某个函数等,此时可以通过二进制分析工具对其进行分析。

二、工具

1、objdump

1.1 作用

 objdump 是一个功能强大的二进制文件分析工具,主要用于显示目标文件、可执行文件和共享库的详细信息.  需要安装 binutils 包

1.2 常用选项

选项说明
-d / --disassemble 反汇编代码段(.text)
-D / --disassemble-all 反汇编所有段
-S / --source 交叉显示源代码和汇编(需-g编译)
-h / --section-headers 显示节区头表
-x / --all-headers 显示所有头信息
-t / --syms 显示符号表
-T / --dynamic-syms 显示动态符号表
-r / --reloc 显示重定位表
-R / --dynamic-reloc 显示动态重定位表
-p / --private-headers 显示程序头/段信息
-C / --demangle 解码C++符号名称
-l / --line-numbers 显示行号信息

1.3 实战

 1) 反汇编先显示

objdump -d /bin/ls          # 反汇编代码段
objdump -D /bin/ls          # 反汇编所有段
objdump -S /bin/ls          # 混合显示源代码和汇编(需要调试信息)

2)节区信息/查看可执行文件结构(输出节区信息(大小、虚拟地址、文件偏移等)。)

objdump -h /bin/ls          # 显示节区头信息
objdump -x /bin/ls          # 显示所有头信息

3)符号表分析

objdump -t /bin/ls          # 显示符号表
objdump -T /bin/ls          # 显示动态符号表

4)动态段信息

objdump -p /bin/ls          # 显示程序头/段信息
objdump -R /bin/ls          # 显示动态重定位项

6

7

5)查找依赖库

8

6)分析函数实现

objdump -d -C /usr/bin/g++ | grep -A 20 "main("

7)调试符号查找

objdump -t libtest.so | grep function_name

2、readelf

2.1 作用

 readelf 是一个用于显示 ELF(Executable and Linkable Format)文件信息的命令行工具,常用于分析 Linux/Unix 系统中的可执行文件、目标文件(.o)、共享库(.so)等。

2.2 常用选项

选项说明
-h / --file-header 显示 ELF 文件头信息(魔数、架构、入口地址等)
-l / --program-headers 显示程序头表(段信息,如加载地址、权限)
-S / --section-headers 显示节区头表(代码、数据等节的详细信息)
-s / --syms 显示符号表(函数、全局变量等符号地址)
-d / --dynamic 显示动态段信息(依赖的共享库、动态符号表等)
-r / --relocs 显示重定位表(链接时需要修正的地址)
-n / --notes 显示 NOTE 段信息(如内核版本、ABI 标签)
-V / --version-info 显示版本控制信息(如符号版本)

2.3 实战

 1)查看可执行文件基本信息

输出内容

Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
Class:                             ELF64
Entry point address:               0x404890
...(其他信息如架构、节区数量等)

2)分析依赖的共享库

readelf -d /usr/bin/python3 | grep NEEDED

输出示例

0x0000000000000001 (NEEDED)     共享库:[libc.so.6]

9

3)排查链接问题

查看符号表确认函数是否存在:

readelf -s libfoo.so | grep function_name