1 个不稳定版本
0.1.0 | 2020年4月12日 |
---|
#724 在 嵌入式开发
44KB
891 行
relox
压缩和解压缩ELF32重定位部分
此crate可以在链接后使用,用于压缩ELF32重定位部分。它还提供了一种解压缩方法,可用于重定位过程中。
如果重定位部分使用了太多的静态存储空间,这种方法对于嵌入式系统可能很有用。
解压缩重定位是一种在初始化期间处理重定位所需的CPU时间和使用的静态存储空间之间的权衡。
ELF32压缩部分布局
/// ELF32 relocations grouped by relocation type.
struct Elf32CRelGroup {
// Type of the relocation.
relocation_type: u8,
// Number of relocations encoded as ULEB128.
count: u32,
// Offsets are encoded as ULEB128.
// First offset is relative to `base_address`,
// otherwise offset[i+1] is relative to offset[i].
offsets: [u32; count],
}
/// A compressed ELF32 relocation section.
struct Elf32CRel {
// Base address of all the relocations.
base_address: u32,
// Number of relocation groups.
count: u8,
// Relocation groups.
groups: [Elf32CRelGroup; count],
}
推荐用法
在宿主机器上,在链接后处理期间,使用host
功能组。
当针对嵌入式设备时,使用embedded
或embedded_minimal
功能组。后者启用no_bounds_check
和no_sanity_check
功能以进一步减少内存占用。
可选功能列表
compress
:包含与压缩相关的方法和结构。decompress
:包含与解压缩相关的结构和方法。no-std
:不使用标准库。no_bounds_check
:使用unsafe
代码代替边界检查变体。no_sanity_check
:在处理LEB128编码时不执行额外的检查。
许可证
根据您的选择,在Apache License, Version 2.0或MIT许可证下获得许可。
除非您明确声明,否则您提交给relox
的任何贡献,根据Apache-2.0许可证的定义,将根据上述许可证双授权,不附加任何额外的条款或条件。
依赖关系
~115KB