Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

节压缩

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;
ch_type

指定压缩算法。Table 12–10 中列出了支持的算法及相关说明。

ch_size

未压缩数据的大小(字节)。请参见 sh_size。

ch_addralign

未压缩数据所需的对齐。请参见 sh_addralign。

压缩节头的 sh_size 和 sh_addralign 字段反映了压缩节的要求。压缩头的 ch_size 和 ch_addralign 字段提供未压缩数据的对应值,从而提供此节未压缩时 sh_size 和 sh_addralign 字段应具有的值。

压缩头后的数据的布局和解释特定于各个算法。除了压缩数据字节,此布局还可能包含特定于算法的参数和对齐填充。

压缩头的 ch_type 成员指定采用的压缩算法,如下表中所示。

表 12-10  ELF 压缩类型 ch_type
名称
ELFCOMPRESS_ZLIB
1
ELFCOMPRESS_LOOS
0x60000000
ELFCOMPRESS_HIOS
0x6fffffff
ELFCOMPRESS_LOPROC
0x70000000
ELFCOMPRESS_HIPROC
0x7fffffff
ELFCOMPRESS_ZLIB

使用 ZLIB 压缩算法对节数据进行压缩。压缩 ZLIB 数据字节以紧跟在压缩头后的字节开头,一直到节的末尾。可在以下网址找到 ZLIB 的文档:http://www.zlib.net/

ELFCOMPRESS_LOOS - ELFCOMPRESS_HIOS

此范围内包含的值(包括这两个值)保留用于特定于操作系统的语义。

ELFCOMPRESS_LOPROC - ELFCOMPRESS_HIPROC

此范围内包含的值(包括这两个值)保留用于特定于处理器的语义。