zoukankan      html  css  js  c++  java
  • 程序员的自我修养阅读笔记三

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

    ELF 文件的头部除了 magic number,还需要指定 ELF 文件类型(可重定位?可执行?共享目标文件?UNIX 中文件的类型不是通过扩展名判断的)、ELF 版本(在文件格式中加入版本信息有助于提高可扩展性)、运行平台、ABI、段表描述符等多种信息。如果不符合当前环境,内核会拒绝执行,而不是执行到一半发现错误再不明不白地退出,这也是一种错误预防机制。

  • 相关阅读:
    BestCoder Round #84
    codeforces#689BMike and Shortcuts
    POJ2985 并查集+线段树 求第k大的数
    Trie树模板 POJ1056
    新建zabbix数据库
    python输出菱形
    wmi获取计算机信息
    python测试IP地址是否ping通
    手机安装python环境
    Centos 8 安装zabbix 爬坑
  • 原文地址:https://www.cnblogs.com/feng747/p/14891943.html
Copyright © 2011-2022 走看看