在 Linux 下反汇编 .so(共享库)文件,常用工具和方法如下:
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
gdb(动态调试 + 反汇编)适合分析运行时的行为。
gdb ./test_program
(gdb) info sharedlibrary
(gdb) disassemble function_name
指定 .so 反汇编:
gdb libxxx.so
(gdb) disassemble
readelf(查看结构,不直接反汇编)用于查看 ELF 结构、符号表、重定位。
readelf -h libxxx.so # 文件头
readelf -S libxxx.so # 段表
readelf -s libxxx.so # 符号表
nm(查看符号)nm -D libxxx.so
Ghidra(NSA 开源)# 启动后直接导入 .so 文件
IDA Pro(最强,商业)radare2(命令行神器)r2 libxxx.so
[0x00000000]> aaa
[0x00000000]> pdf @ sym.function_name
objdump + c++filt(C++ 名称还原)objdump -T libxxx.so | c++filt
# 使用 ltrace / strace 看调用
ltrace ./app
strace ./app
# gdb 附加进程
gdb -p <pid>
file libxxx.so → 确认架构readelf -h libxxx.so → 查看 ELF 信息nm -D libxxx.so → 看导出函数objdump -d -M intel libxxx.so → 反汇编如果你有:
.so 文件可以告诉我,我可以给你更针对性的命令。