zoukankan      html  css  js  c++  java
  • linux下编译upx ucl

    昨天,UPX发布了3.93版本。

    UPX(the Ultimate Packer for eXecutables)是一个非常全面的可执行文件压缩软件,支持dos/exe、dos/com、dos/sys、djgpp2/coff、 watcom/le、win32/pe、rtm32/pe、tmt/adam、atari/tos、linux/i386等几乎所有平台上的可执行文件, 具有极佳的压缩比,还可以对未压缩的文件和压缩完后进行比较。

    1、准备源码包

    直接去github下载zip包或者直接克隆一下。

    git clone https://github.com/upx/upx.git
    cd upx
    rmdir lzma-sdk
    git clone https://github.com/upx/upx-lzma-sdk.git lzma-sdk

    lzma库无需编译。

    然后去下载UCL库。
    UCL是完全使用ANSI C编写的NRV(Not Really Vanished)算法的一个开源实现。 具体的介绍请查阅http://www.oberhumer.com/opensource/ucl/

    wget http://www.oberhumer.com/opensource/ucl/download/ucl-1.03.tar.gz

    国外的网站下载比较慢,可以直接点击此处下载我已经下好的。

    2、编译

    UCL编译

    先生成Makefile文件

    tar -xzvf ucl-1.03.tar.gz
    cd ucl-1.03
    ./configure --prefix=/home/o/ucl CC=clang

    注意上面,指定了C编译器为clang。这里是因为gcc的一个bug,导致 ACC一致性测试失败 ,所以使用clang。
    gcc出现的错误情况在这里FTBFS with GCC 6: compiler failed the ACC conformance test有详细描述。

    编译UPX

    使用下面命令编译upx

    make all UPX_UCLDIR=/home/o/upx/ucl/ucl-1.03 UPX_LZMADIR=./src/lzma-sdk

    注意,这里的UPX_UCLDIR变量的值必须是绝对路径。
    编译出的结果是upx.out程序,在src目录下。

    3、使用测试

    先查看一下编译出upx.out的文件大小

    > ls -l upx.out
    -rwxr-xr-x 1 o users 2006544 2月   8 16:08 upx.out

    然后用其对自身进行压缩一下

    cp upx.out upx.out2
    
    > ./upx.out upx.out2 
                           Ultimate Packer for eXecutables
                              Copyright (C) 1996 - 2017
    UPX git-fdce70  Markus Oberhumer, Laszlo Molnar & John Reiser   Jan 29th 2017
    
            File size         Ratio      Format      Name
       --------------------   ------   -----------   -----------
       2006544 ->    479576   23.90%   linux/amd64   upx.out2                      
    
    Packed 1 file.
    
    WARNING: this is an unstable beta version - use for testing only! Really.
    
    > ls -lh upx.out2
    -rwxr-xr-x 1 o users 469K 2月   8 16:09 upx.out2

    可以看到,压缩的效果还是很明显的。

    为了对比,下面使用strip删除多余信息,并使用gzexe压缩(先还原upx.out2,通过命令./upx.out -d upx.out2

    > strip upx.out2 
    
    > ll upx.out2
    -rwxr-xr-x 1 o users 1.7M 2月   8 16:13 upx.out2
    
    > gzexe upx.out2
    upx.out2:    72.7%
    
    > ll upx.out2   
    -rwxr-xr-x 1 o users 455K 2月   8 16:14 upx.out2
    UPX相对gzexe不一定有压缩上的优势,但是其具有跨平台的优势。
    且UPX压缩之后的程序依然是一个ELF文件,
    但gzexe压缩之后的程序是一个posix shell脚本(后部分是压缩后的程序二进制文件)。

    原文链接 
  • 相关阅读:
    anroid scaleType属性对应的效果
    Cannot make a static reference to the non-static method的解决方案
    Java indexOf()的两个用法
    Android关于notification的在不同API下的用法说明
    Android notification的使用介绍
    第九章 虚拟内存管理
    第八章 内存管理
    第四章 线程
    第二章 操作系统结构
    第一章 计算机系统概述
  • 原文地址:https://www.cnblogs.com/hjbf/p/10411692.html
Copyright © 2011-2022 走看看