我以前看过关于 ELF 魔法的讨论,最近的评论是这个安全堆栈交换问题。我之前见过它提到过,并且我在自己的启动日志中看到过它..但我不确定它是什么。
手册页on elf 有点超出我的能力范围,因为我不使用 C 或较低级别的语言。
作为日常使用 Linux 操作系统的人,什么是 ELF?
答案1
就在您引用的手册页中:
elf - format of Executable and Linking Format (ELF) files
ELF 定义了 Linux 使用的可执行文件的二进制格式。当您调用可执行文件时,操作系统必须知道如何将可执行文件正确加载到内存中,如何解决动态库依赖关系,以及如何跳转到加载的可执行文件以开始执行它。 ELF 格式提供了此信息。 ELF magic 用于识别 ELF 文件,仅是文件的前几个字节:
% od -c -N 16 /bin/ls
0000000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000020
或者
% readelf -h /bin/ls | grep Magic
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
这 16 个字节明确地将文件标识为 ELF 可执行文件。许多文件格式都有“神奇”字节来完成相同的任务——识别文件类型。
答案2
“幻数”是文件开头的常量字节序列(通常)的名称,用于将这些文件标记为特定文件格式。它们的用途与文件扩展名类似。
请参阅行话文件条目了解更多信息。
例如,PNG 图像始终以相同的八个字节开头: 137 80 78 71 13 10 26 10
因此,ELF 幻数是 elf 文件开头的字节,用于标识它们。