温馨提示×

如何反汇编CentOS动态库

小樊
45
2026-08-30 10:45:07
栏目: 智能运维

CentOS 上反汇编 动态库(.so),通常就是使用 GNU BinutilsLLVM/Clang 提供的工具。下面按常见场景给你一个完整、实用的指南。


一、准备环境(CentOS)

1️⃣ 安装常用反汇编工具

sudo yum install -y binutils gdb objdump readelf

如果需要更强的反汇编(如 Intel 语法、控制流分析):

sudo yum install -y nasm radare2

二、查看动态库基本信息

1️⃣ 查看动态库架构

file libxxx.so

示例输出:

ELF 64-bit LSB shared object, x86-64

2️⃣ 查看依赖关系

ldd libxxx.so

3️⃣ 查看段信息

readelf -S libxxx.so

三、使用 objdump 反汇编(最常用)

1️⃣ 反汇编整个 .so

objdump -d libxxx.so > libxxx.asm

2️⃣ 使用 Intel 语法(更直观)

objdump -M intel -d libxxx.so

3️⃣ 只反汇编指定函数

objdump -M intel -d libxxx.so | grep -A 30 "<function_name>"

四、查看符号表(找函数名)

1️⃣ 查看所有符号

nm -D libxxx.so

2️⃣ 只查看函数(导出符号)

nm -D libxxx.so | grep " T "

五、使用 gdb 动态反汇编(更直观)

1️⃣ 启动 gdb

gdb libxxx.so

2️⃣ 反汇编某个函数

disassemble function_name

3️⃣ 使用 Intel 语法

set disassembly-flavor intel
disassemble function_name

六、使用 radare2(高级逆向)

1️⃣ 打开 so

r2 libxxx.so

2️⃣ 分析

aaa

3️⃣ 查看函数列表

afl

4️⃣ 反汇编某个函数

pdf @ sym.function_name

七、查看动态库初始化/反初始化代码

objdump -d libxxx.so | grep -E "_init|_fini"

八、区分 Debug / Release

类型 特点
Debug 有符号表、未优化的汇编
Release 被优化、难读
Strip 无符号表

判断是否被 strip:

file libxxx.so

九、常见问题

❓ 看不到函数名?

nm -D libxxx.so

objdump -T libxxx.so

❓ 只有地址没有符号?

说明被 strip,需要 逆向分析 + 动态调试


十、推荐组合(实战)

快速分析

objdump -M intel -d libxxx.so

函数定位

nm -D libxxx.so

深度逆向

r2 libxxx.so

如果你愿意,可以告诉我:

  • .sox86 / x64 / ARM
  • 自己编译的还是第三方
  • 想分析 某个具体函数还是整体逻辑

我可以给你 针对性的反汇编示例和解读

0