程序员的自我修养阅读笔记三

ELF 文件的头部除了 magic number,还需要指定 ELF 文件类型、ELF 版本、运行平台、ABI、段表描述符等多种信息。如果不符合当前环境,内核会拒绝执行,而不是执行到一半发现错误再不明不白地退出,这也是一种错误预防机制。

目标文件不能只是一堆机器码。很多文件格式有文件开头的 magic number,例如脚本文件的第一行是“#!/path/to/interpreter”,微软的 Word 97/2003 文档开头 7 个字节是 D0CF11E。这些 magic number 一方面是为了使用 file 等命令查询文件类型,在 Linux 桌面环境中调用相关的程序打开文件;对于可执行文件有更重要的意义:Linux 中的 execve 系统调用会读取文件的前 128 个字节,匹配合适的可执行文件装载过程,例如看到“#!”两个字节开头的文件就知道是应该调用#! 后面的解释器来解释执行,看到“0x7F e l f”四个字节开头的文件就知道是 ELF 可执行文件,看到“cafe”四个字节开头的文件就知道是 Java 可执行文件

原文地址:https://www.cnblogs.com/dixingchen/p/14941490.html