是否可以在不反汇编或不使用 grep 或字符串的情况下从 ELF 映像文件获取内核版本?

Is it possible to get kernel version from ELF image file without disassemble or using grep or strings?

我有一个 vmlinuz ELF 映像文件。我需要在不反汇编的情况下从图像文件中获取内核版本。是否可以从该压缩图像文件的偏移量中获取 kerenel 版本?该文件是 ELF 64 位 MSB 可执行文件,静态链接,未剥离。

如前所述,版本号被硬编码到压缩图像文件中。首先,它取决于用于压缩内容的压缩算法,以及如何解压缩它。 由于压缩算法和相关工具选项的组合,在 linux 中解压缩文件可能具有挑战性(不要忘记用于更新算法的更新版本 tar)。 对于

的文件
file extension tar.gz, tgz use e.g. $ tar -xzv -f vmlinuz.tgz
file extension tar.xz, use e.g. $ tar -xJv -f vmlinuz.tar.xz
file extension tar.bz2, use e.g. $ tar -xjv -f vmlinuz.tar.bz2

因此,如果您可以访问 file 实用程序(也应该 运行 on windows),运行 以下内容将接收版本字符串和附加信息您的文件名为例如vmlinuz-4.x.y-z-a.

file vmlinuz-4.x.y-z-a

逆向工程的另一种可能性是读取二进制文件 vmlinuz-4.x.y-z-a 的所有 strings 并使用 grep 获取部分可能的解决方案。

strings vmlinuz-4.x.y-z-a | grep 'linked,'