ELF可重定位目标文件 1、简述 一个main.c文件从源代码到可执行文件要通过四个步骤:预处理、编译、汇编、链接。可重定位目标文件出现在汇编处理之后,其包含二进制代码和数据,并能与其他可重定位目标文件合并,最终创建一个可执行目标文件。 目标文件分为三种:可重定位目标文件、可执行目标文件、共享目标文...
可执行目标文件由链接器将若干个相互关联的可重定位目标文件组合起来而生成。可重定位文件中的代码和数据的地址是相对于起始地址0而得到的,可执行文件中代码和数据的地址则按照操作系统规定的存储器映像来确定起始地址,并且可重定位文件中代码和数据的地址将会被修改,使得它们被重定位到运行时的虚拟存储空间中相应地址...
以下关于可重定位目标文件的叙述中,错误的是( )。 A. 在.rodata节中包含相应模块内所有只读数据 B. 在.rel.text节和.rel.data节中包含相应模块内所有可重定位信息 C. 在.data节中包含相应模块内所有变量的初始值 D. 在.text节中包含相应模块内所有机器代码 ...
从系统的角度来说,可重定位二进制目标文件是一种中间文件,它通常是为可执行文件服务的,也就是说它并不会用来执行,而主要是参与链接过程生成可执行文件,因此可重定位目标文件是被链接器使用的,所有的文件特性也是为链接过程服务。 而可执行文件不一样,它是可以直接在系统中运行的,不过它并不是 bin 文件,放到内存...
对于这样的目标文件,会存在对应的重定位段,用来记录每个全局符号的相关信息(哪个段、多少偏移量),方便链接器做出准确的链接操作。这个信息一般保存在.rela相关的段中,.rela.text就表示记录的是.text段的重定位信息。 重定位段 可以使用readelf -r查看解析后的relocation sections信息。
可重定位目标文件是二进制文件,在linux终端 输入以下命令,就可以看见 ELF头的信息。(不同设备运行结果可能是不一样的) readelf -h main.o 1. 入口点地址为 0x0 :这是 ELF 文件,所以给出的是链接视图,不是执行视图。 2. 本头的大小为 64 字节,说明在 ELF文件中,下一个块(.text) 的起始位置很有可能为...
5. 可重定位目标文件(.o)格式介绍 6. 链接器链接时,符号解析和重定位做了什么事情 7. 可执行目标文件的格式,以及可执行目标文件的加载、执行 8. 程序内存结构介绍 代码和数据(常量、变量)是如何存放在程序的内存结构中的 该课程被包含在以下专栏中
未初始化的全局和静态C变量,以及所有被初始化为0的全局或静态变量。仅仅是个占位符,运行时在内存中分配这些变量,初始化为0。.symtab 一个符号表[1],存放程序中定义和引用的函数和全局变量[2]的信息,每个可重定位目标都有该表,除非用STRIP指令去除。.rel.text 当链接器把该目标问价和别的可执行文件[3]合并的...
5. 可重定位目标文件(.o)格式介绍 6. 链接器链接时,符号解析和重定位做了什么事情 7. 可执行目标文件的格式,以及可执行目标文件的加载、执行 8. 程序内存结构介绍 代码和数据(常量、变量)是如何存放在程序的内存结构中的 该课程被包含在以下专栏中
(Section header table)”来说明应该 为.bss节预留多大的空间 可重定位目标文件格式 0 ELF 头 ELF 头 包括16字节标识信息、文件类型 (.o, .text 节 exec, .so)、机器类型(如 IA-32)、 .rodata 节 节头表的偏移、节头表的表项大小以及 表项个数 .data 节 .text 节 .bss 节 编译后的代码...