用 strings 来“学内核”并不是常规路径,但它确实是一个很实用的辅助手段,尤其适合:
下面按“从入门到能学点东西”的思路讲。
从二进制文件里提取可打印字符串,比如:
cpu_startup_entry
panic: not syncing
/dev/console
sysctl
netfilter
这些字符串往往直接对应:
/usr/src/linux)strings module.ko | less
常见能看到:
strings /boot/vmlinuz-$(uname -r) | less
你会看到很多:
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/
你会发现:
字符串 ↔ 函数 ↔ 源码
这是非常有效的**“逆向式学习法”**。
strings vmlinuz | grep schedule
再用:
cat /boot/System.map-$(uname -r) | grep schedule
你能知道:
例如:
strings vmlinuz | grep -i panic
你会看到:
Kernel panic - not syncing:
VFS: Unable to mount root fs
这些正好对应:
panic()strings + grepobjdump -dreadelfgdb vmlinuxftracebpftracestrings 是“看内核骨架”的工具,源码才是“看内核灵魂”的方式。
如果你愿意,我可以:
你更想从哪一块开始?