摘要:符号哈希表用于支援符号表的访问,能够提高符号搜索速度。
        
阅读全文
 
    
        
        
摘要:一个段 (segment) 由一个或多个节 (section) 组成,但这对 android linker 是透明的,linker 在加载程序时没有用到节信息。所以对于一个 so 文件,修改 ELF Header 中和节有关的成员 (e_shoff、e_shentsize、e_shnum) 不会影响程序运行。
        
阅读全文
 
    
        
        
摘要:一个可被系统加载的程序至少拥有一个可加载段。当系统创建可加载段的内存映像时,会根据 p_flags 赋予一定的访问权限。
        
阅读全文
 
    
        
        
摘要:如果段类型是 PT_NULL,那相应程序头结构体的其它成员都无意义,该程序头项可被忽略。
        
阅读全文
 
    
        
        
摘要:程序头表 (program header table) 是一个结构体数组,数组中的每个结构体元素是一个程序头 (program header),每个程序头描述一个段 (segment)。
        
阅读全文
 
    
        
        
摘要:重定位就是把符号引用与符号定义链接起来的过程,这也是 android linker 的主要工作之一。
        
阅读全文
 
    
        
        
摘要:前面的笔记中提到过 Elf32_Sym 结构,本篇笔记再写一下其中的 st_value 和 st_shndx 成员。
        
阅读全文
 
    
        
        
摘要:Elf32_Sym 结构的 st_info 成员包含了符号的类型和绑定属性等信息。
        
阅读全文
 
    
        
        
摘要:符号表 (symbol table) 中保存着符号的定义或者引用信息。对于 android so 文件来说,.dynsym 符号表保存着库文件的导入和导出符号。
        
阅读全文
 
    
        
        
摘要:字符串表中包含若干以 null 结尾的字符串,这些字符串通常是 symbol 或 section 的名字。当 ELF 文件的其它部分需要引用字符串时,只需提供该字符串在字符串表中的位置索引即可。
        
阅读全文
 
    
        
        
摘要:除此之外,还有一个动态链接的过程。比如有些符号是定义在某个 so 文件中的,需要由动态链接器在装载的过程中进行一些符号查找和地址重定位的工作。要完成此工作,动态链接器需要一些信息,它们存储在一些特殊的 section 中,比如 .dynamic。
        
阅读全文
 
    
        
        
摘要:ELF 文件可以包含很多 section,所有的 section 都在 section header table 中有对应的一项,每个 section header 都是一个 Elf32_Shdr 结构,用于描述相应 section 的信息。
        
阅读全文
 
    
        
        
摘要:ELF 文件中会包含很多 section,所有的 section 都在 section header table 中有对应的一项,每个 section header 都是一个 Elf32_Shdr 结构,用于描述相应 section 的信息。Elf32_Shdr 结构中有一个 sh_type 成员,用于指明 section 的类型。
        
阅读全文
 
    
        
        
摘要:以 32 位的 ELF header 数据结构为例
        
阅读全文
 
    
        
        
摘要:ELF Object files 参与程序的链接和执行,从这两个角度分别有两种视图
        
阅读全文