SHF_COMPRESSED 节标志标识包含压缩数据的节。SHF_COMPRESSED 仅适用于不可分配节,且不能与 SHF_ALLOC 一起使用。此外,SHF_COMPRESSED 不适用于类型为 SHT_NOBITS 的节。
任何必须应用于压缩节的重定位都将指定未压缩节数据的偏移。因此,必须在应用重定位之前解压缩节数据。每个压缩节都会独立指定算法。给定 ELF 目标文件中的不同节可以采用不同的压缩算法。
压缩节以可标识压缩算法的压缩头结构开头。
typedef struct { Elf32_Word ch_type; Elf32_Word ch_size; Elf32_Word ch_addralign; } Elf32_Chdr; typedef struct { Elf64_Word ch_type; Elf64_Word ch_reserved; Elf64_Xword ch_size; Elf64_Xword ch_addralign; } Elf64_Chdr;
指定压缩算法。Table 12–10 中列出了支持的算法及相关说明。
未压缩数据的大小(字节)。请参见 sh_size。
未压缩数据所需的对齐。请参见 sh_addralign。
压缩节头的 sh_size 和 sh_addralign 字段反映了压缩节的要求。压缩头的 ch_size 和 ch_addralign 字段提供未压缩数据的对应值,从而提供此节未压缩时 sh_size 和 sh_addralign 字段应具有的值。
压缩头后的数据的布局和解释特定于各个算法。除了压缩数据字节,此布局还可能包含特定于算法的参数和对齐填充。
压缩头的 ch_type 成员指定采用的压缩算法,如下表中所示。
|
使用 ZLIB 压缩算法对节数据进行压缩。压缩 ZLIB 数据字节以紧跟在压缩头后的字节开头,一直到节的末尾。可在以下网址找到 ZLIB 的文档:http://www.zlib.net/。
此范围内包含的值(包括这两个值)保留用于特定于操作系统的语义。
此范围内包含的值(包括这两个值)保留用于特定于处理器的语义。