• ELF文件格式理解


      ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。可以说,ELF是构成众多xNIX系统的基础之一,所以作为嵌入式Linux系统乃至内核驱动程序开发人员,你最好熟悉并掌握它。换句话说,就是Windows上的EXE(Windows上其实不只EXE是可执行文件),嵌入式Linux上的ELF,它们比较相似。

      一个可执行目标文件,从原代码,要经历预处理器、编译器、汇编器和加载器,才会加载到内存中执行。而目标文件,分为可重定位文件和可执行文件,目标中分成不同的节。


                                                          

                
             
                ELF
             
                描述字的大小、生成该文件的系统的字节顺序、帮助链接解析和解释目标文件的信息(ELF头的大小、目标文件类型--可重定位/可执行/共享/机器类型/节头部表的文件偏移/节头部表中表目大小和数量)
             
                .text
             
                编译完后的机器码
             
                .rodata
             
                只读数据,如printf中的格式串和switch中的跳转表
             
                .data
             
                已初始化的全局C变量
             
                .bss
             
                未初始化的全局C变量
             
                .symtab
             
                符号表,存放在本文件中被定义和引用的函数和全局变量(此全局变量,包含自己定义全局变量和函数,即使带有static也包含,是在符号后加了个数字,另外还包含本文件中引用的其它文件的全局变量和函数,即使这个函数没有在外面用extern引用--变量不引用则编译报错),不包含局部变量(程序运行时,在栈中生成)
             
                .rel.text
             
                可重定位的代码,一般是调用的外部函数或者引用全局的变量的指令,引用本地的不需要改
             
                .rel.data
             
                本模块定义或引用的全局变量
             
                .debug
             
                调试符号表
             
                .line
             
                原始C源程序中的等号和.text节中机器指令间的映射
             
                .strtab
             
                字符串表。包含.symtab.debug节中的符号表,以及节头部中的节名字
             
                描述目标文件
             
                节头部表
             
                由相同大小的表目组成,每个表目描述上面的一个节
             

       

  • 相关阅读:
    Js中的正则表达式
    js内存泄露的几种情况
    JavaScript的setTimeout与setInterval执行时机
    IE模拟addDOMLoadEvent和jQuery的ready实现
    谈谈JavaScript的异步实现
    在iOS7中修改状态栏字体的颜色
    IOS 疯狂基础之 页面间跳转
    ATL2.1版的CString分析
    翻译: 如何改变MFC应用程序主窗口的类名
    VC5.0中的ATL的一个有趣的bug
  • 原文地址:https://www.cnblogs.com/jourluohua/p/6506435.html
Copyright © 2020-2023  润新知