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

  • 相关阅读:
    Python:循环语句
    Python:list用法
    ettercap局域网DNS欺骗实现过程
    Linux关于用户信息的一些命令
    业务逻辑漏洞
    Linux安装Sqlmap等工具
    CVE-2015-1635(MS15-034 )进行DOS攻击
    HTTP.SYS远程代码执行漏洞测试(ms15-034)
    爬虫学习笔记
    MSF利用ms17-010漏洞过程记录
  • 原文地址:https://www.cnblogs.com/feng747/p/14891943.html
Copyright © 2011-2022 走看看