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、段表描述符等多种信息。如果不符合当前环境,内核会拒绝执行,而不是执行到一半发现错误再不明不白地退出,这也是一种错误预防机制。

  • 相关阅读:
    Count the Buildings HDU
    Airport UVA
    17南宁网络赛
    git Please move or remove them before you can merge.
    php ajax bootstrap多文件上传图片预览,ajax上传文件
    thinkphp5多语言
    ueeditor 百度编译器使用onchange效果
    mysql sql_mode=only_full_group_by问题?
    mac navicate 2013
    mac Nginx+CI出现404错误
  • 原文地址:https://www.cnblogs.com/wyppaa/p/14219812.html
Copyright © 2011-2022 走看看