【发布时间】:2021-10-08 11:16:30
【问题描述】:
我正在尝试从二进制 linux 内核映像中提取字符串 (这种特定现象发生在我尝试过的所有类型的图像中:bzImage、vmlinuz、vmlinux ......而不是特定的一个)
简单地运行 'strings' 会打印出许多带有前缀字符的字符串,例如: “4netlink:在进程 `%s' 中解析属性后剩余 %d 个字节。”
但是,查看内核源代码,当前字符串不应包含“4”前缀。 在使用一些 HEX 编辑器打开文件时,我看到该字符串实际上还包括: '\x00\x01' 然后只有 '\x34' ("4") 我的猜测是这是指向特殊部分的某种指针,或者类似的东西, 因为许多其他字符串包括“3”和其他数字(甚至字符)。
希望能提供有关此事的任何信息 谢谢!
【问题讨论】:
-
4来自KERN_WARNING前缀。3来自KERN_ERR前缀。等等。 -
无论如何,
strings使用启发式查找字符串。您可能会发现其他数据连接在一起(\0 结尾的字符串在 C 中很常见,但内核经常修复分隔字符串(当协议规定长度时,\0 可能很重要)。所以使用strings作为近似工具(和从不盲目)
标签: linux-kernel binary executable c-strings