当前位置: 首页 > news >正文 wordpress 发布外链昆明官网seo诊断 news 2025/10/30 20:43:25 wordpress 发布外链,昆明官网seo诊断,定制网站建设成本,公司网站维护工作内容ELF文件是什么 ELF文件是一种对象文件格式。ELF文件的全程是#xff08;Executeable and Linking Format#xff0c;可执行可链接格式#xff09;。ELF文件格式主要有三种#xff1a; 可重定向文件。可重定向文件就是可以用于和其他对象文件链接来创建一个可执行或者可分…ELF文件是什么 ELF文件是一种对象文件格式。ELF文件的全程是Executeable and Linking Format可执行可链接格式。ELF文件格式主要有三种 可重定向文件。可重定向文件就是可以用于和其他对象文件链接来创建一个可执行或者可分享对象so。可执行文件。可执行文件简而言之就是可以运行的文件。so。就是分享对象。so主要有两种用途。第一种链接器可以和其他的可重定向文件或者其他的so链接产生一个新的对象文件第二种就是通过动态链接的方式将so和其他的so或者其他的可执行程序链接形成一个新的程序镜像。 本文主要是参考System V解析文档。 ELF的文件格式 接下来我们就来看看ELF文件的文件格式 上面的两个图主要是两种不同的视角链接视角以及执行视角。 从链接视角来看主要是分成程序头、节、节头表。其中程序头可选。 从执行视角来看主要分成ELF头、段、以及节头表。其中节头表可选。 ELF头 ELF头位于文件的头包含了用于描述这个ELF文件的“地图 road map”。 一个节section中主要包含了对象文件大部分链接视角的信息例如有指令、数据、符号表、重定向信息等。 ELF头中主要的内容存放了当前ELF文件的架构信息、ELF魔数等ELF文件的信息。 下面我们来看看ELF头的定义 typedef struct {unsigned char e_ident[EI_NIDENT]; //elf_identificationElf32_Half e_type;Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry;Elf32_Off e_phoff;Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; } Elf32_Ehdr;e_ident: e_dient可以看到是一个char类型的数组正如我在结构体中的注释那样这是一个elf idnetification一个elf的表示码这个表示码有什么用是什么待会下面会介绍的。e_type: 这个标记着当前ELF文件的识别码。这个识别码主要有7个。分别是下面的几个 尽管核心文件内容未指定但类型 ET_CORE 被保留用于标记文件。从 ET_LOPROC 到 ET_HIPROC含的值保留用于特定于处理器的语义。如果指定了含义处理器补充将对其进行解释。其他值被保留并将根据需要分配给新的目标文件类型。如果e_type是ET_REL那就说明这个ELF文件是一个可重定向文件ET_DYN就是一个可以动态链接的ELF文件简称so。大家可以结合上面的介绍来理解这一个字段的内容。e_machine: ELF 文件的所属架构如果安装了gelf的话可以在gelf.h文件中查看到所有当前linux支持的架构对应的机器代码。一般我们可以不用关注这个点。e_version: e_version其实主要就是两个。EV_NONE0EV_CURRENT1。虽然EV_CURRENT一般给的是1但是也会按照需要进行修改。EV_CURRENT表示的是当前ELF为难版本如果这个ELF是一个拓展版本那么EV_CURRENT可能会大于1。e_entry: 这个表示elf文件的入口。也就是说当系统加载的时候所进入的地址入口。是一个虚拟地址用于跳转或者程序入口的。如果这个值为0说明这个elf文件没有关联的入口。e_phoff:从这里开始有意思的来可。这个值代表的就是程序头表在ELF文件中的偏移。是一个字节计算的值。如果一个elf文件有程序头表假设这个值为20说明程序头表在ELF文件中的入口位置是ELF文件的20 byte偏移。通过这个e_phoff就能跳转到程序头表。如果这个值为0说明当前elf文件没有程序头表。e_shoff: 那么我们看看这个其实跟上一个类似。只不过这里是section的罢了。e_flags:这个flag是跟处理器相关的。一般的格式EF_machine_flag。了解一下即可e_ehsize:这个值描述了ELF文件头的大小。以字节为单位e_phentsize:这个值描述的是程序头表中一个入口的大小以字节为单位一个ELF文件中所有的程序头表入口大小都是一样的。e_phnum:这个值描述了当前ELF文件中有多少个程序头表入口。那么有了这些信息你知道一个可执行文件的程序头表有多大吗那就是e_phentsize*e_phnum的大小啦。e_shentsize:跟前面的类似这个记录的就是在链接视角下一个节头表中的入口信息的大小。也是以字节为单位的。e_shnum:这个就是描述当前节头表中有多少个节入口。这个节头表的大小就是e_shentsize*e_shnum。e_shstrndx:这个值记录的就是节名称字符串表关联的条目的节头表索引。说人话就是这个值代表的是一个索引这个index指向elf文件中的一个section这个section就是字符串表里面存放了section name。 程序头表program header table 这个程序头表是可选的也就是说一个elf文件中不一定会有这个程序头表。如果一个elf文件中提供了这个程序头表的话这个程序头表就告诉了我们的系统如何去创建一个进程镜像。一个可执行文件程序必须要有程序头表。 节头表section header table 节头表中包含了用于描述这个ELF文件的节信息。在ELF文件中每一个section在节头表中都会有一个入口。每一个节的入口都提供了这个节的节名、大小等等的信息。用于链接的ELF文件必须要有节头表而其他的对象文件呢看自己的情况可有可无吧。 总结一个ELF文件中除了ELF头以外就有程序头表以及节头表的描述信息。这个ELF文件是否有节头表和程序头表依赖于这个对象文件的作用。如果是用于链接的那就是需要有节头表链接主要是用于给其他object file提供信息用于运行的那就必须要有程序头表。上图是这样画的但是实际情况下他们的顺序并不是一定的。section实际在elf中的顺序应该是乱的但是是通过section header table中的信息来进行修正的。所以从链接视角来看section header table是多么的重要呢。 ELF Identification 在前面我们看到了ELF的结构体定义的第一个成员就是一个数组是一个elf idnetification的解释这里我们就来解释一下这个elf idnetification具体是什么。 看到上面的表格了吗一开始EI_MAG0到EI_MAG3存放的是ELF魔数这个从我的角度来看其实实际的意义不大属于是历史遗留产物。EI_MAG0是0x7f的占位符。 剩下的主要是一个ELF文件的类型啊填充字段的解释等等。这部分大家有空稍微了解一下就行了。 Section 前面介绍了ELF头接下来就开始介绍ELF文件中的主体部分Section节。在这里我会称Section为节因为从链接视角来看会分的细一点。多个section组成一个段Segment。之前看了点书section成为段这个一度给我造成了不少的混淆。所以我在这里还是更希望把section称为节segment称为段。毕竟我们程序运行当中会经常遇到段错误Segment Fault而不是节错误是吧。 节头表 我们知道ELF文件中如果是可链接文件必须要有一个节头表的。因为链接往往是对跟某个section进行链接这个时候我们只需要拿到节头表就能知道这个ELF文件中任意一个section在ELF文件中的位置。 在ELF头中有个成员变量e_shoff这个成员变量告诉我们这个节头表是从ELF的开头到ELF节头表的以字节为单位的偏移量。通过这个e_shoff我们只需要从ELF的开头偏移对应个字节就可以到达ELF的节头表了。 在节头表中有一些非常特殊的索引这些索引是保留下来的不会分配给具体的section使用具体有哪些索引呢 SHN_UNDEF:这个索引为0这个表示未定义或者没有意义的section引用。举个例子如果一个符号所关联的section是SHN_UNDEF的话说明这是一个未定义的符号。 注意节头表是包含了index 0的。具体的使用上是有差别的。如果使用gelf库的话我们会采用gelf_nexscn()函数获取下一个section但是在第一次调用的时候返回的section就是index为0的section。SHN_LORESERVE 该值指定了保留索引范围的下限。SHN_LOPROC到SHN_HIPROC之间 这个区间的可以理解为为处理器预留的范围SHN_ABS 这个值代表了关联的引用是一个绝对值。什么意思呢打个比方一个符号引用的section的索引是SHN_ABS说明这个符号是一个绝对值并不会收到重定向的影响。SHN_COMMON 表明关联的符号是通用符号SHN_HIRESERVE SHN_LORESERVE到SHN_HIRESERVE之间的索引是保留索引。节头表里面是不会包含这个范围之内的条目的。 讲到这里需要说一下section的四个特性 ELF文件中每一个section有且只有一个节头section header来描述一般看到elf中shdr说的就是section header。每一个section都是占据一段连续的区间。文件中的节不得重叠。文件中的字节不得位于多个节中。目标文件可能具有非活动空间。各种标头和节可能无法“覆盖”目标文件中的每个字节。非活动数据的内容未指定。这块内容我们可以不用过于执着。 节头 下面我们来看看section header typedef struct {Elf32_Word sh_name;Elf32_Word sh_type; Elf32_Word sh_flags; Elf32_Addr sh_addr; Elf32_Off sh_offset; Elf32_Word sh_size; Elf32_Word sh_link; Elf32_Word sh_info; Elf32_Word sh_addralign; Elf32_Word sh_entsize; } Elf32_Shdr;前面我们知道了每一个section都会有一个section header来描述的。而ELF中的所有的section header都在一个section header table中描述。他们之间可能并没有顺序但是所有的section都在section header table中了我们只需要遍历section header table中的每一个entry即可遍历到每一个section的信息了。这里有一个小妙招在elf中看到了sh就可以联想是Section Header(SH)了。下面来逐个将一下每一个成员的作用 sh_name: sh_name是一个索引值。这个索引是指向节头字符串表section header string table。这里section header string table是一个字符串表里面存放的就是各个索引的名字组成的字符串这个sh_name指的就是这个当前的这个section的名字在这个字符串表中的位置。sh_type: 这个成员存储了这个section对应的类型 sh_type主要有以下几个值以SHT_开头SHT_NULL NULL: 0 ;这个值标记的当前的这个section header是不可用的。这个节头对应的那个section是不存在的或者这么说这个节头没有对应的section。一旦这个节头的sh_type是SHT_NULL的话那么这个section header的其他成员都是未定义的值。PROGBITS: 1该部分保存着程序定义的信息其格式和含义完全由程序决定。SYMTAB: 2这个表示这个节头对应的那个section是一个符号表。因为这个section里面提供了一些用于链接的符号信息。对于一个完整的符号表而言它可能还会包含许多动态链接过程不需要用上的符号信息。STRTAB: 3这个代表着对应的section是字符串表。一个目标文件里面可能有多个字符串表的section。RELA:4这个代表这个section里面有重定向入口。这些重定向是带有addend的什么是addend那就是进行重定向的时候加在后面的常数偏移当然一个目标文件里面会有多个RELAsection。HASH:5这个代表这section是一个符号哈希表。所有参与动态链接的对象都必须包含一个符号哈希表。具体的哈希表后面会讲到。目前而言一个目标文件中只有有一个哈希表。DYNAMIC:6这个说明了这个section是用于动态链接的。动态链接放后面去讲。NOTE:7这个简单就是写了一些关于这个文件的说明。NOBITS:8这是一个很神奇的节这个节并不占用空间。其余的功能类似于PROGBITS虽然这个节不占空间sh_offset成员也是包含了一个偏移量的虽然只是意思上的。REL:9这个跟RELA节是类似的只不过这个section中的重定向入口是不带有常数偏移addend的。SHLIB:10此节类型是保留的但具有未指定的语义。包含此类型节的程序不符合ABI。在一般的ELF文件中我感觉比较少碰到碰到了一般也不用管。DYNSYM:11见SYMTAB只不过这里包含的是需要用于动态链接的最少量的符号用于优化空间的。LOPROC/ HIPROC这里的官方解释是这两个值构成了一个范围这个范围内的预留给处理器。如果指定了含义处理器补充将对其进行解释。其实从名字上也能看出点端倪PROCessor。LOUSER/HIUSER: 这个范围表示的是保留给应用程序的。应用程序可以使用 SHT_LOUSER 和 SHT_HIUSER 之间的节类型而不会与当前或将来的系统定义节类型冲突。 sh_flags: 这个是当前section的标记位。section有四种flagSHF_WRITE表示当前的这个section中的数据在程序执行过程中是可写的SHF_ALLOC这个标记说明了当前的section在进程执行期间占用内存但一些控制部分不驻留在目标文件的内存映像中SHF_EXECINSTR代表当前的section包含了可执行的机器指令SHF_MASKPROC一些处理器掩码相关的。sh_addr: 如果当前的section会出现在内存映像中的话这个addr给出的就是这个section会驻留的第一个字节的地址。sh_offset: 这个是一个偏移量。这个偏移量是从ELF文件的开始到当前这个section的第一个字节的偏移量。打个比方如果sh_offset100说明了从ELF文件的开头偏移100个字节就到了这个section开始的第一个字节。用于section开头定位。sh_size: 表示这个section的大小。如果一个section的类型是SHT_NOBITS的话这个值不一定等于0但是实际上这个section是不占用空间的。sh_link: 该成员保存一个节头表索引链接其解释取决于节类型。sh_info: 里面包含了一些额外的信息。sh_addralign: 在ELF文件中某些节可能存在地址对齐的约束。举个例子如果一个section是双字节对齐那么这一整个section都应该是双字节对齐的。也就是说sh_addr 的值必须与 0 一致以 sh_addralign 的值作为模。sh_entsize: 有些节包含固定大小条目的表例如符号表。对于这样的节此成员给出每个条目的大小以字节为单位。如果节不包含固定大小条目的表则该成员包含 0。 特殊节 特殊节special section这些节是系统使用的有特殊的含义的类型的。如下表所示 既然本文想要全面介绍ELF文件那么这些特殊节的作用肯定也是要说明的接下来我们就一个个看看这些special section到底是干什么用的。 实际上我们看到的section前缀是.的“一般”可以认为是系统保留section也就是我们的sepcial_section。 .bss: 这个section是NOBITS类型的section。实际上这个section里面存放的是尚未初始化的数据。当程序开始运行的时候才会使用0来初始化这些数据。因此在尚未运行的时候ELF文件中的这块内容是没有数据的所以是NOBITS类型的section。.comment:这里包含的是版本控制信息不会影响实际运行内容.data .data1: 这种section中存放的就是已经初始化的一些数据。.debug 这种section带有符号调试信息。一般会有.debug为前缀的话都是供给调试信息使用的.dynamic: 这种类型的section一般带有动态链接信息的。一般会带上SHF_ALLOC类型的flag标志位。这块信息的作用会留存在内存映像当中。.dynstr: 这个section代表着这里面的字符串是需要被动态链接的。最常见的是代表与符号表条目相关联的名称的字符串。.dynsym: 一个持有动态链接符号表的section.fini: finish这个说明了这个section持有的是程序结束过程中需要执行的可执行指令。也就是说当这个程序正常退出的时候系统就会执行这个section中的机器指令。.got: 这个section持有全局偏移表global offset table。.hash 一个符号哈希表节。符号哈希正如我们前面介绍的那样一个可以动态链接的section必须会有一个hash table的。.init用于程序初始化过程中执行的可执行代码。一般情况下在代码中通过__init修饰的代码在通过gcc编译以后产生的.o文件里面应该就会被放在这个section里面。这个section只有在程序加载初始化的过程中会被调用因此这里面的代码是不支持热补丁的。interp: 这个section里面保存了程序解析器的路径。如果一个文件的可加载段里面有这个section的话那么这个section的标记为就会被设置为SHF_ALLOC因为可加载段里面会加载到内存当中执行。所以留存在内存当中设置为SHF_ALLOC。.line: 此部分保存符号调试的行号信息描述了源程序和机器码之间的对应关系。内容是未指定的。.note: 代表这是一个note节.plt: 此节包含过程链接表.rela{name} .rel{name}有rel的说明这是一个重定向section里面存放的重定向的条目。rela代表有addend的重定向条目的section。正如前面所说的如果这个section在可加载段里面的这个section就是带有SHF_ALLOC的标志位。一般来说后面带上的名字就是这个用于重定向的section。举个例子.text节的重定向节就是.rela.text或者.rel.text.rodata .rodata1:这部分的section中包含的数据是只读数据。一般是在程序镜像中的不可写的段中。.shstrtab:这个是section header string table的节。这个section存放的就是section名字的节前面说的sh_name就是这个section中的索引这个section中的sh_name索引就是那个section header对应的那个section的名字。.strtab: 这是一个字符串表最常见的是代表与符号表条目相关联的名称的字符串。如果文件具有包含符号字符串表的可加载段则该部分的属性将包含 SHF_ALLOC 位否则该位将关闭。.symtab:这个是一个符号表遍历这个section我们可以得到elf文件中所有的symbol.text:主要是代码节包含程序的可执行指令。 上面就是针对基本能够遇到的特殊节的意义解析。一般来说前缀是.的一般是系统预留的section名字。一般的应用程序使用的是没有这个前缀的section这样可以避免跟系统预留的section出现冲突。 字符串表String Table 在ELF文件中什么是字符串表呢字符串表节里面存放了很多的字符串他们用于指示对应的section或者symbol的名字。我们看一下字符串表的示例 我们从上面的这个图可以看到字符串表的开头是\0每一个字符串之间通过一个\0来分割。确保每一个字符串都是有明确的结尾的。 此时节头表中的sh_name的作用就是这个表中的索引index。index0的时候字符串是空的当index7的时候这个字符串就是Variable。也就是说从index开始一直读取直到遇到\0。 符号表 ELF文件中有一个表叫做符号表。符号表里面包含需要用于定位或者重定向的符号定义以及引用的信息。符号表其实是一个数组而对应的符号的索引就是这个符号表数组的下标。下面我们来看看ELF文件中一个符号的定义 typedef struct {Elf32_Word st_name;Elf32_Addr st_value;Elf32_Word st_size; unsigned char st_info; unsigned char st_other; Elf32_Half st_shndx; } Elf32_Sym;这个st_name就是在String table这个数组的下标。如果这个st_name0说明这个symbol没有名字。 st_value: 这个代表关联的那个符号的值。这个说法有点奇怪这个值是什么主要依赖于这个符号的上下文。一般来说在我遇到的应用范围里面这个值主要是一个地址。st_size:这个代表这个符号的大小。打个比方一个数据对象的大小就是这个对象所包含的字节数。st_info: 这个里面记录着这个symbol的信息。包括符号的类型以及绑定属性。符号的绑定属性主要有下面5种 STB_LOCAL表示这个符号是一个局部符号。也就是我们的.c语言里面的static 声明的符号。这个是这个文件以外不可见的符号。在不同的文件之间可能会有多个重名的符号这些重名的局部符号彼此之间不会相互影响。STB_GLOBAL全局符号。这个符号是一个全局符号意思是所有链接在一起的对象文件都可以看到这个符号。一般来说EXPORT_SYMBOL以及extern的符号就属于这种类型的符号。STB_WEAK弱引用符号。在C语言中有弱引用类型__weak__编译后的符号就会在这里面。弱符号类似于全局符号但其定义的优先级较低。STB_LOPROC/STB_HIPROC这个也是处理器预留的符号类型由处理器解析其具体的语义。 st_other: 这个值没有意义。st_shndx: 每一个符号表的条目入口都跟某个相关的节关联。因此这个值存储的是节头表的索引。具体是什么意思呢那就是假如现在有一个.c文件我定义了一个functionA然后用-ffsection编译这个函数会被单独编译成一个section与此同时符号表中也有一个符号symbol[st_name] functionA通过符号functionA的st_shndx在街头表中可以找到一个对应的section这个section就是function A的section。 一般来说对于一个符号表而言所有的具有STB_LOCAL绑定属性的符号一般会在弱引用符号或者全局符号之前。就我看来一般STB_LOCAL是本地可见的符号一般是static 修饰的函数符号。 上面介绍的STB_*可以认为是symbol table binging type我自己理解的没有官方认证的哈。是一个符号的绑定类型。接下来要介绍的是符号的类型也就是符号本身的类型STT STT_NOTYPE 说明则个符号的类型是没有指定的STT_OBJECT说明了这个符号的类型是一个object的STT_FUNC说明这个符号类型是函数的STT_SECTION说明这个符号是节的。需要注意的是一般在符号表中是这个类型的符号它的绑定类型一般是STB_LOCAL的本地绑定符号类型。STT_FILE这是一个文件类型的符号。对于一个文件类型的符号而言它的绑定类型一般是STB_LOCAL的本地符号绑定类型。一般指这个符号name是一个文件名来的其节索引是SHN_ABS类型。这里有一个小知识点就是如果我们在遍历符号表的时候发现了STT_FILE类型的符号我们其实可以认为接下来的其他符号在遇到其他STT_FILE符号之前的符号都是属于在这个STT_FILE文件下的符号。也就是说STT_FILE为界限然后后面跟着的就是这个文件下的符号。剩下属于处理器语义保留不做介绍。 具体是什么意思呢举个例子在我们遍历elf文件中的符号表的时候如果我们获得一个符号的的类型是STT_FUNC说明这个符号指向的对象实际上是一个函数。如果该elf文件在编译的过程中使用的–ffsection的话那么这个symbol还会指向一个section就是这个函数的section。 STT_FUNC还有另外的一个影响。针对so文件如果其他的object文件引用so中的符号属于是STT_FUNC的话连接器或为这个被引用的符号自动创建一个过程链接表的入口。但是其他类型的符号即使被引用了也不会有这个过程链接表的。 如果这个符号引用了节中的位置那么符号结构体中的st_shndx就派上用场了这个时候st_shndx记录的就是引用的节在节头表section header table中的索引。当然如果section被重定向了symbol也是会跟着变得随着section的重定向而重新计算其值。 此外st_shndx有的时候会指向一个特殊的值的索引这些section是有特殊的意义的。 SHN_ABS这个代表了当前的这个symbol的值是一个绝对值它的地址不会因为重定向而发生变化SHN_COMMON这个代表的当前的这个symbol有一个公用空间只不过这个公用空间可能还没有分配。也就是说链接编辑器将在 st_value 的倍数的地址上为符号分配存储空间。符号的大小表示需要多少字节。SHN_UNDEF代表这个符号没有定义。但是只是表示当前这个符号在当前符号表中没有定义。在ld过程跟其他的object file进行连接的时候可能这个符号的定义在其他的对象文件上此时连接器就会将该符号的引用直接连接到实际的位置上去了。 符号值 符号值就是st_value成员。这个成员的语义有以下三种 在一个重定向文件中st_value 保存部分索引为 SHN_COMMON 的符号的对齐约束。在一个可重定向文件中st_value保存的是偏移量。也就是说st_shndx保存了对应的section的index通过st_shndx定位到需要引用的那个section的头地址然后加上st_value的偏移量就是这个symbol在这个section引用的具体位置了。在可执行文件或者是程序文件中st_value表示一个虚拟地址为了使这些文件的符号对于动态链接器更有用节偏移量文件解释让位于与节号无关的虚拟地址内存解释。 重定向 重定向Relocation是什么 首先我们假设有一个文件a.c里面用到的swap函数是定义在b.c里面的。我们首先编译了的是a.c得到了a.o那么对于编译器而言a.c中调用的指令 callq swap对应的swap的地址这个时候是不知道的既然不知道编译器就会搞一个假地址放在这里既然我现在不知道那就后面知道再补上去咯。 那么在连接阶段把a.o与b.o进行连接的时候连接器知道了swap的定义的地址了那么对于a.o而言要执行的话是不是需要把a.o中的假地址给修正成为一个可以调用的地址啊那么修正a.o中的假地址过程我们就叫做重定向了。 重定向结构体以及成员解析 重定向结构体定义 typedef struct {Elf32_Word r_info; } Elf32_Rel;typedef struct {Elf32_Addr r_offset;Elf32_Word r_info;Elf32_Sword r_addend; } Elf32_Rela;这里需要注意的是Rel是没有addend的重定向而Rela是有addend的重定向。addend是什么addend就是重定向过程中需要加上的常数偏移。也就是说在进行地址替换的过程中如果需要加上固定的偏移才能到对应的地址的话这个固定偏移就是放在addend中了。 成员解析 下面来解析一下重定向结构体的成员 r_offset这个值给出了需要重定向的地址。对于一个可重定向文件该值是从节开头到受重定位影响的存储单元的字节偏移量。说人话就是这个值是从对应的section的开头到需要重定位的字节偏移量。举个例子如果r_offset为8也就是说从对应的section的开始8字节偏移的地址需要重定向。对于可执行文件或共享对象该值是受重定位影响的存储单元的虚拟地址r_info这个值给出了必须进行重定位的符号表索引以及要应用的重定位类型。打个比方一个跳转指令的重定向入口持有需要调用的那个函数的符号表索引。如果这个索引值是SHN_UNDEF的话说明这个符号没有定义而且重定向的时候会使用0作为symbol value来用。重定向的类型是由处理器指定的。r_addend这个上面说了这里不说了。 总结 下面我就用一幅图来总结一下这个文章主要介绍的内容 如果我们需要遍历当前ELF文件中所有的section的话我们只需要遍历elf文件的section header table即可。 通过section header table中的每一个节点都能定位到对应的section都能获得该section的全局信息。 而在一个elf文件中可能需要与别人链接有许多引用外面的符号此时我们就可以遍历符号表。符号表中的每一个节点都是一个符号无论是section的name还是symbol的name我们都是可以通过对应节点中的index在string table中找对对应的索引来获取对应的字符串从而获得这个symbol或者section的字符表达。 文章转载自: http://www.morning.zypnt.cn.gov.cn.zypnt.cn http://www.morning.bpmtq.cn.gov.cn.bpmtq.cn http://www.morning.bgkk.cn.gov.cn.bgkk.cn http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn http://www.morning.mnjwj.cn.gov.cn.mnjwj.cn http://www.morning.dbbcq.cn.gov.cn.dbbcq.cn http://www.morning.xgkxy.cn.gov.cn.xgkxy.cn http://www.morning.fkmyq.cn.gov.cn.fkmyq.cn http://www.morning.mfcbk.cn.gov.cn.mfcbk.cn http://www.morning.qnbck.cn.gov.cn.qnbck.cn http://www.morning.zljqb.cn.gov.cn.zljqb.cn http://www.morning.kdlzz.cn.gov.cn.kdlzz.cn http://www.morning.hqlnp.cn.gov.cn.hqlnp.cn http://www.morning.twmp.cn.gov.cn.twmp.cn http://www.morning.dhqzc.cn.gov.cn.dhqzc.cn http://www.morning.jlxqx.cn.gov.cn.jlxqx.cn http://www.morning.rbknf.cn.gov.cn.rbknf.cn http://www.morning.kqglp.cn.gov.cn.kqglp.cn http://www.morning.lzzqz.cn.gov.cn.lzzqz.cn http://www.morning.rnds.cn.gov.cn.rnds.cn http://www.morning.gfrtg.com.gov.cn.gfrtg.com http://www.morning.wknj.cn.gov.cn.wknj.cn http://www.morning.fkmyq.cn.gov.cn.fkmyq.cn http://www.morning.yfqhc.cn.gov.cn.yfqhc.cn http://www.morning.tgtsg.cn.gov.cn.tgtsg.cn http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn http://www.morning.divocn.com.gov.cn.divocn.com http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn http://www.morning.nrmyj.cn.gov.cn.nrmyj.cn http://www.morning.qwmpn.cn.gov.cn.qwmpn.cn http://www.morning.hqbk.cn.gov.cn.hqbk.cn http://www.morning.bmts.cn.gov.cn.bmts.cn http://www.morning.wjndl.cn.gov.cn.wjndl.cn http://www.morning.rmfw.cn.gov.cn.rmfw.cn http://www.morning.huarma.com.gov.cn.huarma.com http://www.morning.kyhnl.cn.gov.cn.kyhnl.cn http://www.morning.dmldp.cn.gov.cn.dmldp.cn http://www.morning.tbnn.cn.gov.cn.tbnn.cn http://www.morning.kstgt.cn.gov.cn.kstgt.cn http://www.morning.bhbxd.cn.gov.cn.bhbxd.cn http://www.morning.rxfjg.cn.gov.cn.rxfjg.cn http://www.morning.rydhq.cn.gov.cn.rydhq.cn http://www.morning.brmbm.cn.gov.cn.brmbm.cn http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn http://www.morning.nlryq.cn.gov.cn.nlryq.cn http://www.morning.rrgm.cn.gov.cn.rrgm.cn http://www.morning.qxltp.cn.gov.cn.qxltp.cn http://www.morning.rrjzp.cn.gov.cn.rrjzp.cn http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn http://www.morning.fwmln.cn.gov.cn.fwmln.cn http://www.morning.knpmj.cn.gov.cn.knpmj.cn http://www.morning.qnwyf.cn.gov.cn.qnwyf.cn http://www.morning.qbzdj.cn.gov.cn.qbzdj.cn http://www.morning.kdldx.cn.gov.cn.kdldx.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.frmmp.cn.gov.cn.frmmp.cn http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn http://www.morning.qghjc.cn.gov.cn.qghjc.cn http://www.morning.zffn.cn.gov.cn.zffn.cn http://www.morning.hxxzp.cn.gov.cn.hxxzp.cn http://www.morning.gyrdn.cn.gov.cn.gyrdn.cn http://www.morning.lwsct.cn.gov.cn.lwsct.cn http://www.morning.dydqh.cn.gov.cn.dydqh.cn http://www.morning.hnmbq.cn.gov.cn.hnmbq.cn http://www.morning.hbtarq.com.gov.cn.hbtarq.com http://www.morning.ns3nt8.cn.gov.cn.ns3nt8.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn http://www.morning.mjytr.cn.gov.cn.mjytr.cn http://www.morning.fdmtr.cn.gov.cn.fdmtr.cn http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.tqhpt.cn.gov.cn.tqhpt.cn http://www.morning.plqsz.cn.gov.cn.plqsz.cn http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn http://www.morning.wbxrl.cn.gov.cn.wbxrl.cn http://www.morning.kwqqs.cn.gov.cn.kwqqs.cn http://www.morning.nshhf.cn.gov.cn.nshhf.cn http://www.morning.zjrnq.cn.gov.cn.zjrnq.cn http://www.morning.nchlk.cn.gov.cn.nchlk.cn http://www.morning.gjqnn.cn.gov.cn.gjqnn.cn 查看全文 http://www.tj-hxxt.cn/news/263306.html 相关文章: 网站验收技术指标玉田住房和建设局网站 东营网站建设电话零元开店的电商平台 做营销型网站的企业网站合作建设方案 手机网站开发项目如何注册品牌名称和商标 可以做雷达图的网站wordpress下拉菜单的阴影怎么改 龙岩做网站公司在哪里手机网站 跳转 河南省工程建设业协会网站口碑好网站建设多少钱 虚拟网站管理系统无锡网站建设网页制作 如何在百度搜到自己的网站中国银行官网登录入口 做旅游网站的目的是什么做海报哪个网站的素材多 重庆住房和城乡建设厅网站首页建设网站必须要配置apache吗 深圳公司有哪些优化 凡科建站官网入口wordpress+主题课堂 沈阳定制网站方案做母亲节网站的素材 网站如何自己做优化自助建站系统免费加盟 动漫做美食的视频网站网站建设云主机云服务器 西安技术网站建设搭建网站基本步骤 网站开发完成如何上线公司注册资金实缴新政策出台2024 网站平台建设可行性模仿一个网站建设多少钱 网站专题方案网站建设的流程ppt 英雄联盟网站设计购物盒子WordPress支付插件 建设银行理财产品网站做视频网站的方法 饲料 东莞网站建设网站如何做用户的实名认证 小说网站开发环境那个号做网站虚拟主机怎么选择 洛阳专业做网站公司神马推广登录 大良营销网站建设价位丹阳网站建设机构 丝绸之路网站建设懂得做网站还可以做什么兼职 建设网站需要什么设施食品库存管理软件 2008建立的php网站慢十堰做网站的 网站后台管理破解大连中国建筑装饰网