在 Debian(或一般 Linux)环境下,strings 本身并不能“直接定位函数”,它只能从二进制文件中提取可打印字符串。但结合其他工具,strings 常被用来辅助定位函数、符号、日志、常量等线索。下面按“实用套路”讲清楚怎么用。
strings:找函数名、错误信息、格式串、URL、关键字符串strings:不能反汇编、不能看调用关系nm / objdump / gdb / readelf 才能真正“定位函数”strings ./binary
strings ./binary | grep -i "init"
strings ./binary | grep -i "handler"
strings ./binary | grep -E "do_|process_|handle_"
很多程序会把函数名作为:
- 日志
- 断言
- 调试信息
- 错误信息
strings -t x ./binary
输出示例:
1a2b3c main
1a2b50 do_work
然后用偏移在 objdump 中找附近代码。
strings -t x ./binary | grep "do_work"
假设得到:
0x401234 do_work
反汇编该地址附近:
objdump -d ./binary | grep -A 20 "401234"
nm ./binary | grep do_work
输出:
0000000000401234 T do_work
直接反汇编:
objdump -d ./binary --start-address=0x401234
file ./binary
# stripped
步骤:
strings 找线索(错误字符串)objdump -d 找引用该字符串的地址gdb 动态调试strings ./app | grep "file not found"
得到:
0x402000 file not found
查找谁引用该地址:
objdump -d ./app | grep -B5 -A10 "402000"
apt install binutils gdb radare2
rabin2 -z ./binary → 字符串 + 地址r2 ./binary → izz~keywordgdb ./binary → info functions这些用:
gdbstraceltraceobjdump -dIDA / Ghidra
strings是“探雷器”,不是“显微镜”
用它找线索 → 用nm / objdump / gdb定位函数
如果你有:
我可以给你一步步命令。