我正在研究 ELF 二进制解剖/结构,有很多很多资源描述了 ELF 的魔力。我理解45 4c 46 = ELF
签名的事情,但没有任何消息来源提及的是7f
in7f 45 4c 46
是什么。
我发现一个消息来源说它是“固定字节”,但这是什么意思?它是否只是一些随机的固定字节,如果情况稍有不同,可能会是其他东西?
答案1
这是 ELF 文件的第一个字节。
Linux 有一个“幻数”系统,用于识别特定的文件类型。除了对实用程序有帮助之外file
,内核还使用它们来识别可执行文件。
“魔法”概念有着悠久的历史,但制造商(例如 Sun、Dell、HP 等)或软件包创建者之间的具体值几乎没有相关性。
使用任何初始可打印字符(例如 E)都可以是纯文本。使用 0x80(八进制 0200)及以上可以标记 UTF-8 多字节字符。许多 ASCII 控制字符都会出现问题(NUL、NL、TAB)。没有太多的选择。因此,初始 0x7F (DEL) 字节是防止任何此类混淆的合理选择。
您可以查看magic
和的本地手册页file
。
DEL 为 0x7F 实际上并非偶然。当数据通常保存在纸带上时,可以通过冲掉所有碎屑(加上第 8 位,用于偶校验)来消除误冲。大多数读者完全跳过了 NUL 和 DEL 字符。