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

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
J
Java Code Geeks
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
Google DeepMind News
Google DeepMind News
小众软件
小众软件
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
B
Blog

博客园 - 夏之夜

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