温馨提示×

怎样用linux strings学内核

小樊
41
2026-09-11 10:00:51
栏目: 智能运维

strings 来“学内核”并不是常规路径,但它确实是一个很实用的辅助手段,尤其适合:

  • 了解内核/模块里暴露了哪些字符串(函数名、错误提示、路径、配置项)
  • 分析内核镜像、驱动模块(.ko)、vmlinuz、System.map)
  • 逆向/安全/取证/调试时快速找线索

下面按“从入门到能学点东西”的思路讲。


一、先搞清楚:strings 能干啥、不能干啥

✅ strings 能做的

二进制文件里提取可打印字符串,比如:

cpu_startup_entry
panic: not syncing
/dev/console
sysctl
netfilter

这些字符串往往直接对应:

  • 函数名(如果没完全 strip)
  • 日志/错误信息
  • 子系统名字
  • 配置项、路径

❌ strings 不能做的

  • 看不到逻辑
  • 看不到调用关系
  • 不能替代源码阅读(/usr/src/linux

二、最基础的用法(内核场景)

1️⃣ 查看内核模块里有什么

strings module.ko | less

常见能看到:

  • 作者信息
  • 支持的设备 ID
  • 调试打印字符串
  • 函数名(未 strip 时)

2️⃣ 查看 vmlinuz / bzImage

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

你会看到很多:

  • 内核版本
  • 编译信息
  • 子系统名字
  • panic 信息

3️⃣ 结合 grep 学内核结构

strings /boot/vmlinuz-$(uname -r) | grep -i netfilter
strings /lib/modules/$(uname -r)/kernel/fs/*.ko | grep ext4

这能帮你:

  • 知道内核支持哪些子系统
  • 知道模块里大概有什么功能

三、和源码对照(这是“学内核”的关键)

推荐组合拳

strings fs/ext4/ext4.ko | grep "ext4_"

然后去源码里搜:

grep -r "ext4_" fs/ext4/

你会发现:

字符串 ↔ 函数 ↔ 源码

这是非常有效的**“逆向式学习法”**。


四、配合 System.map 看函数

strings vmlinuz | grep schedule

再用:

cat /boot/System.map-$(uname -r) | grep schedule

你能知道:

  • 函数是否存在
  • 地址范围
  • 是否被编译进内核

五、用 strings 看“内核在想什么”

例如:

strings vmlinuz | grep -i panic

你会看到:

Kernel panic - not syncing:
VFS: Unable to mount root fs

这些正好对应:

  • panic()
  • 启动流程
  • 文件系统初始化

六、学习路线建议(strings 是工具,不是终点)

初级阶段

  • strings + grep
  • 看模块/内核里有什么
  • 对应函数名去搜源码

中级阶段

  • objdump -d
  • readelf
  • gdb vmlinux

高级阶段

  • 源码 + ftrace
  • bpftrace
  • 内核调试(kgdb)

七、一句话总结

strings 是“看内核骨架”的工具,源码才是“看内核灵魂”的方式。

如果你愿意,我可以:

  • 给你一个**“用 strings 学某个子系统”的实战例子**
  • 或针对 某个内核版本 / 某个模块 带你一步步分析

你更想从哪一块开始?

0