elf文件格式学习总结
elf文件格式学习总结
1 / 6
elf文件格式学习总结
elf文件格式学习总结
编译器将一个源文件生成目标文件时,会在目标文件中生成符号表和重定位表。
符号表包含在文件中定义的全局符号以及在文标文件组合在一起,创建进程映像(比如:动态加载器把exe程序和*.so加载进内存执行)。
目标文件全部是程序的二进制表示,目的是直接在某种处理器上直接执行。
节区头部表格
表 5 节区头部表格中的特殊下标
SHN_COMMON OXFFF2 此节区定义的符号是公共符号。如 FORTRAN 中 COMMON 或者未分配的 C 外部变量。
(《linux内核完全剖析》P42 汇编器1次只处理1个源程序,如果变量不在本文件里定义,汇编器就留个记号,交给连接器处理。连接器对未定义的符号进行特殊处理。1。如果未定义符号里数值是0,则表示该符号在本汇编源程序里没有定义,连接器会尝试到其他连接的文件里确定它的数值。比如:在一个源程序里使用了一个符号,但没有对符号进行定义,汇编器处理汇编源程序时就会产生这种未定义符号,其值等于0。 2。如果未定义符号的数值不为0,那么该符号的值就表示是 .comm 公共声明(as汇编器汇编命令:.comm symbol,length 该命令在bss节区里,声明一个命名的公共存储区域)的需要保留的公共存储空间的字节长度。符号指向该存储空间的第1个地址处。汇编器1个1个的处理源文件,,。连接器在连接过程中,会把多个目标文件中的同名的公共符号合并。如果连接器没有找到1个符号的定义(而且此符号的值不为0),而是找到1个或多个公共符号,那么连接器就会分配长度为length字节的未初始化内存。length必须是一个绝对值表达式,如果连接器找到多个长度不同但同名的公共符号,连接器就会按最大的length分配空间。)
elf文件格式学习总结
elf文件格式学习总结
3 / 6
elf文件格式学习总结
sh_flags 字段
SHF_ALLOC: 表示此节区在进程执行过程中需要占用内存。某些(用于)控制(的)节区并不加载进目标文件的内存映像中,则其sh_flags位应设置为 0。
表 10 sh_link和sh_info字段解释
SHT_DYNAMIC sh_link: 此节区中条目所用到的字符串表(所在)的节区号 sh_info:0
SHT_HASH sh_link: 此哈希表所适用的符号表(所在)的节区号 sh_info:0
SHT_REL/SHT_RELA sh_link: 相关联的符号表(所在)的节区号 sh_info: 需要重定位操作的节区的节区号。表示该节区里包含有地址不明确的内容(变量/或函数符号地址不明确),需要进行重定位操作。
SHT_SYMTAB/SHT_DYNSYM sh_link: 相关联的字符串表(所在)的节区号 sh_info: 所有局部符号(LOCAL)的个数 + 1
(用
elf文件格式学习总结 来自淘豆网m.daumloan.com转载请标明出处.