泰晓科技 -- 聚焦 Linux - 追本溯源,见微知著!
网站地址:https://tinylab.org

泰晓RISC-V实验箱,转战RISC-V,开箱即用
请稍侯

单个程序 Size 优化之压缩后自解压执行

Wu Zhangjin 创作于 2020/03/24

By Falcon of TinyLab.org Dec 09, 2019

前面讨论系统裁剪的时候,提到了内核和文件系统的压缩支持,实际上单个可执行文件也可以这样做。

基本原理跟内核压缩一样,就是先把 vmlinux 压缩一遍,然后把压缩完的内核作为新程序的一部分,在新程序的开头加上解压和执行代码。

这样的解决方案有 UPX,完全开源:

需要注意的是,实际使用中,需要保证压缩率产生的收益比加上额外的解压代码要高,否则就没意义。

下面来用一用:

$ sudo apt-get install upx-ucl

$ ls -lh /bin/ls
-rwxr-xr-x 1 root root 124K Mar  3  2017 /bin/ls

$ upx ls
Ultimate Packer for eXecutables

File size   Ratio   Format    Name
------------   ------   ---------   -----------
126584->57188 45.18% linux/ElfAMD ls

Packed 1 file.

$ ls -lh ls
-rwxr-xr-x 1 falcon falcon 56K Aug 25 12:48 ls

压缩了有超过 50%。UPX 的压缩成绩是 50~70%,比 gzip 要好,关键是,这个压缩完还是可以执行的。

在内核中类似这样用时间换空间的做法很多,还有 @甜质粥 之前分享的 zram:



Read Related:

Read Latest: