温馨提示×

如何反汇编linux动态库

小樊
37
2026-09-06 13:26:53
栏目: 智能运维

在 Linux 下“反汇编动态库(.so 文件)”通常是为了分析其内部逻辑、排查问题或做安全研究。下面从工具选择 → 基本用法 → 常见场景给你一个实用指南。


一、常用工具

1. objdump(最基础)

系统自带,适合快速反汇编。

objdump -d libxxx.so

常用选项:

  • -d:反汇编可执行代码段
  • -D:反汇编所有段(包括数据段)
  • -S:源码+汇编(需要带调试信息)
  • -M intel:使用 Intel 语法(默认是 AT&T)
  • --no-show-raw-insn:不显示机器码

示例(Intel 语法):

objdump -d -M intel libxxx.so

2. gdb(交互式分析)

适合“边看边调”。

gdb ./libxxx.so

常用命令:

info functions
disassemble function_name

也可以 attach 到进程:

gdb -p <pid>

3. nm / readelf(先看符号和结构)

反汇编前先看“有什么”。

nm -D libxxx.so      # 动态符号
readelf -h libxxx.so # ELF 头
readelf -S libxxx.so # 段信息

4. radare2 / rizin(强推)

开源逆向神器,功能比 objdump 强很多。

r2 -d libxxx.so

常用:

aa        # 自动分析
afl       # 列出函数
pdf @ main

5. IDA Pro / Ghidra(商业/免费 GUI)

  • IDA Pro(强大,但贵)
  • Ghidra(NSA 开源,免费)

适合复杂逆向、伪代码恢复。


二、典型操作流程(以 objdump 为例)

1. 查看导出函数

nm -D libxxx.so | grep exported_func

2. 反汇编指定函数

objdump -d -M intel libxxx.so | grep -A 50 "exported_func>:"

3. 带调试信息(如果有)

objdump -S -M intel libxxx.so

三、动态库反汇编的注意点

1. 符号是否被 strip

file libxxx.so
  • stripped:没有符号,反汇编更难
  • 可配合 radare2 自动识别函数

2. 位置无关代码(PIC)

.so 通常是 PIC,地址是相对的,分析时要注意:

  • call *%rax
  • GOT / PLT

3. 反编译 vs 反汇编

  • 反汇编:汇编代码
  • 反编译:伪 C 代码(IDA / Ghidra)

四、推荐组合

目的 推荐
快速看汇编 objdump
动态调试 gdb
深入分析 radare2 / Ghidra
商业级 IDA Pro

如果你有具体场景(比如:

  • 想看某个函数逻辑
  • Android 的 .so
  • 没有符号怎么分析
  • 如何 Hook 动态库)

可以直接说,我可以给你更针对性的步骤。

0