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 符号表