什么是ELF Magic?


26

我之前看过有关ELF魔术的讨论,最近一次是关于此安全堆栈交换问题的评论。我之前已经看过它,并且在我自己的启动日志中也看到了它。但是我不确定它是什么。

elf上的手册页让我有些头疼,因为我不使用C或较低级别的语言。

作为使用Linux作为日常操作系统的人,ELF是什么?



13
标题更适合rpg stackexchange。
Cthulhu 2014年

Answers:


37

在您参考的手册页中:

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可执行文件。许多文件格式都有“魔术”字节,可以完成相同的任务-识别文件的类型。


8
真正的魔力只是前四个字节。以下字段描述字节序,CPU体系结构以及其他各种内容。
西蒙·里希特

归结为语义的@SimonRichter。前4个字节是通用标识许多文件类型的魔术,但是询问者确实指定了“ ELF魔术”,甚至readelf承认是16个字节。
casey 2014年

2
如果您想真正掌握技术,则前16个字节是“标识”(e_ident),其中前4个字节是幻数(EI_MAG0EI_MAG3
Michael Mrozek

1
@slebetman我对“魔术”的使用来自ELF规范:“文件的前4个字节带有'魔术号',将文件标识为ELF目标文件”
Michael Mrozek

2
“明确”夸大了一点。除非您知道文件的来源,否则一切都只是猜测。/bin当然,其中的文件几乎肯定是ELF二进制文件。您下载了一些随机文件,但是……没有任何意义。
cHao 2014年

11

“魔术数字”是在文件开始处赋予恒定字节序列的名称(通常),用于将那些文件标记为特定文件格式。它们的作用类似于文件扩展名。

有关更多信息,请参见术语文件条目

例如,PNG图像始终以相同的八个字节开头:137 80 78 71 13 10 26 10

因此,ELF魔幻数字是elf文件开头的字节,用于标识它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.