UPX压缩程序 arm板子编译使用

准备资源:将下载库置于同一文件中

1、下载uclzlib库及编译

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

./configure --prefix=$PWD/../test CXX=arm-hisiv600-linux-g++ AR=arm-hisiv600-linux-ar --host=arm-hisiv600-linux
make
make install

清理:
make clean

2、下载zlib库及编译

wget http://pkgs.fedoraproject.org/repo/pkgs/zlib/zlib-1.2.3.tar.gz/debc62758716a169df9f62e6ab2bc634/zlib-1.2.3.tar.gz
export CXX=arm-hisiv600-linux-g++
export CC=arm-hisiv600-linux-gcc
export AR=arm-hisiv600-linux-ar
export RANLIB=arm-hisiv600-linux--ranlib

./configure --prefix=$PWD/../test
make
make install

因为以上库输出目录均为:$PWD/../test目录,故在编译upx需抛出此路径;
注意在zlib编译时同时生成.a与.so,在编译upx时,如果需要使用静态库,则删掉动态库,不做处理默认链接动态库.so,在程序运行时也需要拷贝此动态库到arm板子上。

3、下载upx库及编译

wget http://upx.sourceforge.net/download/upx-3.91-src.tar.bz2

UPX_UCLDIR=$PWD/../test CXX=arm-hisiv600-linux-g++ make all
编译成功后可在upx-3.91-src/src下查看到可执行文件upx.out!!!


遇到问题:链接-lucl -lz找不到路径
链接报错:
#-lucl -lz
/opt/hisi-linux/x86-arm/arm-hisiv600-linux/bin/../lib/gcc/arm-hisiv600-linux-gnueabi/4.9.4/../../../../arm-hisiv600-linux-gnueabi/bin/ld: cannot find -lucl
/opt/hisi-linux/x86-arm/arm-hisiv600-linux/bin/../lib/gcc/arm-hisiv600-linux-gnueabi/4.9.4/../../../../arm-hisiv600-linux-gnueabi/bin/ld: cannot find -lz

解决方法:在upx-3.91-src/src的Makefile中修改如下:
LIBS += -lucl -lz
修改为:
LIBS += -L $(UPX_UCLDIR)/lib -lucl -lz

备注:有博友说需要下载LZMA4.43库,但我未下载,正常编译可使用:
lzma库路径: http://nchc.dl.sourceforge.net/project/sevenzip/LZMA%20SDK/4.43/lzma443.tar.bz2

 

4、upx测试:

将upx.out拷贝到arm-hisiv600板子上,chmod 777 upx.out

[root]# ./upx.out -V
upx 3.91
UCL data compression library 1.03
Copyright (C) 1996-2013 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2013 Laszlo Molnar
Copyright (C) 2000-2013 John F. Reiser
Copyright (C) 2002-2013 Jens Medoch
UPX comes with ABSOLUTELY NO WARRANTY; for details type 'upx.out -L'.
[root]# 

压缩前:
[root]# ls -ll 123
-rwxr-xr-x    1 root     root         13392 May 30 18:09 123
[root]# 
[root]# ./upx.out 123
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2013
UPX 3.91        Markus Oberhumer, Laszlo Molnar & John Reiser   Sep 30th 2013

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
     13392 ->      7948   59.35%   linux/armel   123                           

Packed 1 file.

压缩后:
[root]# ls -ll 123
-rwxr-xr-x    1 root     root          7948 May 30 18:09 123

还原:
[root]# ./upx.out -d 123
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2013
UPX 3.91        Markus Oberhumer, Laszlo Molnar & John Reiser   Sep 30th 2013

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
     13392 <-      7948   59.35%   linux/armel   123

Unpacked 1 file.

UPX相对gzexe不一定有压缩上的优势,但是其具有跨平台的优势。且UPX压缩之后的程序依然是一个ELF文件,但gzexe压缩之后的程序是一个posix shell脚本(后部分是压缩后的程序二进制文件)。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值