温馨提示×

如何用linux strings学内核

小樊
41
2026-10-14 06:48:06
栏目: 智能运维

用 strings 来“学内核”并不是直接读源码,而是从已编译的内核镜像/模块里提取可读字符串,辅助你理解内核在做什么、支持什么、哪里可能有线索。下面按“能学到什么 → 怎么用 → 实战例子 → 学习路线”来讲。


一、strings 能帮你学内核的什么?

strings 只是把二进制里的可打印字符串抓出来,但对内核学习很有用:

  • 看内核支持哪些功能/驱动
  • 找内核日志格式、错误提示
  • 看系统调用、参数名、调试信息
  • 分析内核模块在干什么
  • 理解攻击面 / 漏洞点(安全向)

⚠️ 注意:
strings 看不到逻辑、控制流、函数关系,它只是“文本线索”。


二、基本用法(必会)

1️⃣ 从内核镜像提取字符串

strings /boot/vmlinuz-$(uname -r)

但 vmlinuz 是压缩的,通常要先解压:

# x86 常见
extract-vmlinux /boot/vmlinuz-$(uname -r) > vmlinux
strings vmlinux | less

(发行版一般带 extract-vmlinux)


2️⃣ 从内核模块学驱动

strings btrfs.ko

你能看到:

  • 支持的文件系统特性
  • 错误信息
  • 模块参数

3️⃣ 过滤你关心的内容

strings vmlinux | grep -i "panic"
strings vmlinux | grep -i "schedule"
strings vmlinux | grep -i "filesystem"

三、用 strings 学内核的实战例子

例 1:看内核支持哪些文件系统

strings vmlinux | grep -i "ext4\|xfs\|btrfs\|overlay"

你会看到注册名、错误信息、mount 参数。


例 2:理解调度器

strings vmlinux | grep -i "sched"

可能看到:

  • sched: RT throttling activated
  • cpu latency

对应源码里的 kernel/sched/


例 3:学系统调用

strings vmlinux | grep -i "sys_"

虽然不完整,但能帮你建立“系统调用 → 内核字符串”的直觉。


例 4:安全 / 漏洞学习

strings vmlinux | grep -i "segfault"
strings vmlinux | grep -i "overflow"

配合 dmesg、CVE 学非常高效。


四、strings + 其他工具才“真学内核”

单独用 strings 不够,推荐组合:

工具 作用
strings 找线索
grep 过滤
objdump 看汇编
nm 看符号
readelf 看结构
gdb 动态分析
源码 最终解释

例如:

strings vmlinux | grep "Oops"

→ 去源码搜 Oops → 学异常处理


五、用 strings 学内核的“正确心态”

❌ 错误:

“我看 strings 就能懂内核”

✅ 正确:

“strings 是地图碎片,源码才是地形”


六、推荐学习路径(用 strings 辅助)

  1. 跑 strings vmlinux
  2. 挑你感兴趣的字符串
  3. 去 kernel.org 或发行版源码搜
  4. 读对应子系统
  5. 写模块 / 改配置验证

如果你愿意,我可以:

  • 带你 从一个 strings 输出反推内核源码
  • 给你 “初学者该看的内核字符串清单”
  • 用 某个内核模块(如 ext4 / netfilter)做例子

你更想从哪一块开始?

0 踩