温馨提示×

linux中如何反汇编so文件

小樊
42
2026-10-03 11:40:43
栏目: 智能运维

在 Linux 下反汇编 .so(共享库)文件,常用工具和方法如下:


一、常用反汇编工具

1. objdump(最常用,系统自带)

适合查看汇编代码、符号、段信息。

# 反汇编整个 .so
objdump -d libxxx.so

# 反汇编并显示源码(如果有调试信息)
objdump -S libxxx.so

# 只反汇编某个函数
objdump -d libxxx.so | grep -A 50 "<function_name>:"

# 显示所有符号
objdump -T libxxx.so

常用参数:

  • -d:反汇编可执行段
  • -D:反汇编所有段
  • -S:源码+汇编
  • -M intel:使用 Intel 语法(默认 AT&T)
objdump -d -M intel libxxx.so

2. gdb(动态调试 + 反汇编)

适合分析运行时的行为。

gdb ./test_program
(gdb) info sharedlibrary
(gdb) disassemble function_name

指定 .so 反汇编:

gdb libxxx.so
(gdb) disassemble

3. readelf(查看结构,不直接反汇编)

用于查看 ELF 结构、符号表、重定位。

readelf -h libxxx.so      # 文件头
readelf -S libxxx.so      # 段表
readelf -s libxxx.so      # 符号表

4. nm(查看符号)

nm -D libxxx.so

5. 高级反汇编工具(推荐)

(1) Ghidra(NSA 开源)

  • 支持反汇编 + 反编译(C 伪代码)
  • 跨平台
# 启动后直接导入 .so 文件

(2) IDA Pro(最强,商业)

  • 反汇编 + 反编译
  • Linux 版本可用

(3) radare2(命令行神器)

r2 libxxx.so
[0x00000000]> aaa
[0x00000000]> pdf @ sym.function_name

(4) objdump + c++filt(C++ 名称还原)

objdump -T libxxx.so | c++filt

二、动态分析(运行时反汇编)

# 使用 ltrace / strace 看调用
ltrace ./app
strace ./app

# gdb 附加进程
gdb -p <pid>

三、典型分析流程(推荐)

  1. file libxxx.so → 确认架构
  2. readelf -h libxxx.so → 查看 ELF 信息
  3. nm -D libxxx.so → 看导出函数
  4. objdump -d -M intel libxxx.so → 反汇编
  5. 用 Ghidra / IDA 做深入分析和反编译

如果你有:

  • 具体 .so 文件
  • 想分析某个函数
  • 想做 Android / ARM 逆向

可以告诉我,我可以给你更针对性的命令。

0 踩