在 Linux 下“反汇编动态库(.so 文件)”通常是为了分析其内部逻辑、排查问题或做安全研究。下面从工具选择 → 基本用法 → 常见场景给你一个实用指南。
objdump(最基础)系统自带,适合快速反汇编。
objdump -d libxxx.so
常用选项:
-d:反汇编可执行代码段-D:反汇编所有段(包括数据段)-S:源码+汇编(需要带调试信息)-M intel:使用 Intel 语法(默认是 AT&T)--no-show-raw-insn:不显示机器码示例(Intel 语法):
objdump -d -M intel libxxx.so
gdb(交互式分析)适合“边看边调”。
gdb ./libxxx.so
常用命令:
info functions
disassemble function_name
也可以 attach 到进程:
gdb -p <pid>
nm / readelf(先看符号和结构)反汇编前先看“有什么”。
nm -D libxxx.so # 动态符号
readelf -h libxxx.so # ELF 头
readelf -S libxxx.so # 段信息
radare2 / rizin(强推)开源逆向神器,功能比 objdump 强很多。
r2 -d libxxx.so
常用:
aa # 自动分析
afl # 列出函数
pdf @ main
IDA Pro / Ghidra(商业/免费 GUI)适合复杂逆向、伪代码恢复。
nm -D libxxx.so | grep exported_func
objdump -d -M intel libxxx.so | grep -A 50 "exported_func>:"
objdump -S -M intel libxxx.so
file libxxx.so
stripped:没有符号,反汇编更难radare2 自动识别函数.so 通常是 PIC,地址是相对的,分析时要注意:
call *%raxGOT / PLT| 目的 | 推荐 |
|---|---|
| 快速看汇编 | objdump |
| 动态调试 | gdb |
| 深入分析 | radare2 / Ghidra |
| 商业级 | IDA Pro |
如果你有具体场景(比如:
.so可以直接说,我可以给你更针对性的步骤。