温馨提示×

怎样用debian strings定位函数

小樊
47
2026-10-21 16:18:17
栏目: 智能运维

在 Debian(或一般 Linux)环境下,strings 本身并不能“直接定位函数”,它只能从二进制文件中提取可打印字符串。但结合其他工具,strings 常被用来辅助定位函数、符号、日志、常量等线索。下面按“实用套路”讲清楚怎么用。


一、先说结论

  • ✅ strings:找函数名、错误信息、格式串、URL、关键字符串
  • ❌ strings:不能反汇编、不能看调用关系
  • ✅ 配合:nm / objdump / gdb / readelf 才能真正“定位函数”

二、用 strings 找“函数相关字符串”

1️⃣ 基本用法

strings ./binary

2️⃣ 过滤可能的函数名

strings ./binary | grep -i "init"
strings ./binary | grep -i "handler"
strings ./binary | grep -E "do_|process_|handle_"

很多程序会把函数名作为:

  • 日志
  • 断言
  • 调试信息
  • 错误信息

3️⃣ 查看字符串在文件中的偏移

strings -t x ./binary

输出示例:

  1a2b3c main
  1a2b50 do_work

然后用偏移在 objdump 中找附近代码。


三、从字符串 → 定位函数(关键步骤)

方法一:strings + grep + 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

方法三:无符号(strip 过)

file ./binary
# stripped

步骤:

  1. strings 找线索(错误字符串)
  2. objdump -d 找引用该字符串的地址
  3. gdb 动态调试

四、实战例子(定位错误函数)

strings ./app | grep "file not found"

得到:

0x402000 file not found

查找谁引用该地址:

objdump -d ./app | grep -B5 -A10 "402000"

五、更高级的组合(Debian 常用)

apt install binutils gdb radare2
  • rabin2 -z ./binary → 字符串 + 地址
  • r2 ./binary → izz~keyword
  • gdb ./binary → info functions

六、什么时候不该用 strings?

  • ❌ 想看函数调用关系
  • ❌ 想看参数、栈结构
  • ❌ 想动态跟踪执行

这些用:

  • gdb
  • strace
  • ltrace
  • objdump -d
  • IDA / Ghidra

七、一句话总结

strings 是“探雷器”,不是“显微镜”
用它找线索 → 用 nm / objdump / gdb 定位函数

如果你有:

  • 具体二进制
  • 是否 strip
  • 想定位哪个函数

我可以给你一步步命令。

0 踩