轻量级 ELF:探索潜在的尺寸缩减

主要观点:ELF 设计强调控制结构的自然大小和对齐指南,虽过去能高效处理但会导致文件较大,提出“Light ELF”(EV_LIGHT,版本 2),其在 ELF 头中e_version设为 2 以保持向后兼容,链接时传统 ELF 和 Light ELF 可混合,Light ELF 利用[CREL]进行重定位,传统 ELF 的[节头表]较大,Light ELF 通过特定格式减小其大小,符号表等可压缩,压缩节面临头部开销问题,Light ELF 引入小开销的头部格式,还开发了 Clang/lld 原型并与 WebAssembly 比较,强调这只是个思考实验。

关键信息:

  • EV_NONE为 0,EV_CURRENT为 1,EV_LIGHT为 2。
  • Light ELF 利用[CREL],传统 ELF 的[REL 和 RELA]未用。
  • 紧凑节头表格式及编码方式。
  • 符号表可通过[SHF_COMPRESSED]压缩,字符串表可利用文本压缩算法。
  • 压缩节面临头部开销问题及 Light ELF 的解决办法。
  • 开发的 Clang/lld 原型及相关实验数据。

重要细节:

  • 传统 ELF 中sh_addralign可为 0 或 2 的正整数次幂,紧凑编码无法编码 0 但无一般性损失。
  • 给出了解码特定节头的 C++代码示例。
  • 实验中不同优化级别下.o文件大小及节头表大小的变化。
  • 与 WebAssembly 的比较及相关编译命令。
阅读 14
0 条评论