Использование upx для уменьшения размера выполняемого файла

опубликовано

Тэги: rust upx

// src/main.rs

fn main() {
    println!("Hello, world!");
}
$ rustc --version
rustc 1.56.1 (59eed8a2a 2021-11-01)
$ cargo build --release
$ stat --format=%s target/release/hello-world
3655752
$ rustup default nightly
$ rustc --version
rustc 1.59.0-nightly (6db0a0e9a 2021-11-29)
$ cargo build --release
$ stat --format=%s target/release/hello-world
3636472
$ readelf -n target/release/hello-world

Отображаются заметки, найденные в: .note.gnu.build-id
  Владелец     Размер данных	Description
  GNU                  0x00000014	NT_GNU_BUILD_ID (уникальный ID битовой строки сборки)
    ID сборки: 79fa61baf79f590ad16f4abd9a8f083214085635

Отображаются заметки, найденные в: .note.ABI-tag
  Владелец     Размер данных	Description
  GNU                  0x00000010	NT_GNU_ABI_TAG (метка версии ABI)
    ОС: Linux, ABI: 3.2.0
$ file target/release/hello-world
target/release/hello-world: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=79fa61baf79f590ad16f4abd9a8f083214085635, for GNU/Linux 3.2.0, with debug_info, not stripped
$ upx -9 -o target/release/hello-world-min target/release/hello-world
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2020
UPX 3.96        Markus Oberhumer, Laszlo Molnar & John Reiser   Jan 23rd 2020

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   3636472 ->    890268   24.48%   linux/amd64   hello-world-min               

Packed 1 file.
$ readelf -n target/release/hello-world-min
$ file target/release/hello-world-min
target/release/hello-world-min: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), statically linked, no section header
  • Используются дефолтные значения [profile.release]
  • Репозиторий upx