昨天,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 eXecutablesCopyright (C) 1996 - 2017
UPX git-fdce70  Markus Oberhumer, Laszlo Molnar & John Reiser   Jan 29th 2017File 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脚本(后部分是压缩后的程序二进制文件)。

转载于:https://www.cnblogs.com/hjbf/p/10411692.html

linux下编译upx ucl相关推荐

  1. linux 保存编译log,(转)Linux下编译安装log4cxx

    一个项目的服务器端在Linux平台下,用到了开源日志库log4cxx,这个库是apache项目的一个子库.功能很不错.下面记录下它的编译和安装过程. 第一步安装apr-1.3.8,顺序不能错,它必须首 ...

  2. linux下编译make文件报错“/bin/bash^M: 坏的解释器,使用grep快速定位代码位置

    一.linux下编译make文件报错"/bin/bash^M: 坏的解释器 参考文章:http://blog.csdn.net/liuqiyao_01/article/details/415 ...

  3. 一份简单的在 Linux下编译及调试 C 代码的指南

    摘要: 一份简单的在 Linux下编译及调试 C 代码的指南 对于Linux下的C程序员来说,几乎天天都会和Linux打交道.但在很多人的眼中,Linux是一个易用性极差.靠命令驱动的操作系统,根本无 ...

  4. linux下软件编译终止,[2018年最新整理]linux下编译运行程序命令大全.ppt

    [2018年最新整理]linux下编译运行程序命令大全 1. 项目课题引入 2. Vi编辑器的使用方法 3. Linux中C语言程序的编辑 4. Linux中C语言程序的运行 5. 现场演示案例 课题 ...

  5. linux emule 编译 wx-config --libs,linux下编译wxwidgets所写程序所遇到的问题

    记录linux下编译wxwidgets所遇到的问题 1./home/hrd/baohualib/wxWidgets-3.0.2/include/wx/platform.h:184:22: 致命错误: ...

  6. linux下编译wpa_supplicantnbsp;…

    linux下编译wpa_supplicant 收藏 前一段时间只在vs2005下编译成功过.经过近一段时间的琢磨,今天终于在linux下成功编译了wpa_supplicant. 挺简单的事情折腾了这么 ...

  7. java libpcap,Linux下编译安装libpcap

    要做Sniffer了,先在Linux下编译一下libpcap 1.编译安装flex #libpcap 1.1要求flex必须在2.4.6及以上 wget http://prdownloads.sour ...

  8. linux redis php,Linux下编译redis和phpredis的方法

    这篇文章主要介绍了Linux下编译redis和phpredis的方法,分析了redis的下载,编译,安装及遇到的问题与相应的解决方法,需要的朋友可以参考下 本文讲述了Linux下编译redis和php ...

  9. linux下编译libuv,linux下libuv库安装教程

    下载并编译libuv libuv需要自己手动下载源码,并手动编译. 当前目录为:/home/xlz/test/github/,在后面,会用$PATH来代替,我的系统的Debian8,64bit. $g ...

  10. Linux 下编译并运行C++程序

    1>新建一个C++新文件 ----helloworld.c #include<iostream> using namespace std; int main(){cout<&l ...

最新文章

  1. np.array_split可以不均等划分 np.split为均等划分
  2. 剑指offer 面试题6:重建二叉树
  3. iOS 可能用到的三方框架
  4. 解决了无法显示验证码的问题
  5. Java API 操作Zookeeper
  6. nodejs项目的package-lock.json文件的用途
  7. python虚拟环境和pyenv_Python多版本管理器pyenv和虚拟环境pyenv-virtualenv的安装设置...
  8. thinkphp连接远程数据库慢_干货分享—Niushop数据库配置
  9. windows组件_如何关闭win7系统windows移动中心 电脑关闭windows移动中心方法【详解】...
  10. 手机如何看python文件大小_如何安全地检查上传文件的大小?(How to check size of uploaded file safely in bottlepy?)...
  11. javaWeb上传文件(jsp上传文件)
  12. Python3制作网易云音乐下载器!付费的你猜能下载吗!
  13. matlab仿真高尔顿正态分布源码,《正态分布》教学设计
  14. android使用高德地图SDK获取定位信息
  15. 网页屏幕上有只小虫在到处爬(代码)
  16. 腾讯伪原创视频需要改什么好处
  17. Android 面试题收集
  18. 用C语言输出1000到2000年之间的闰年
  19. rb格式转换器有哪些
  20. 第四个模型:决策树模型

热门文章

  1. Repeater OnItemCommand 失效
  2. leetcode[541]翻转字符串里的单词/reverse words in a string 综合考察了字符串的多种操作
  3. Master PDF Editor for Mac(PDF文档编辑软件)
  4. 如何开启/关闭Pages文稿上的字数统计功能?
  5. Java三月春招面试经历分享(没offer不是我的锅)
  6. Android最佳安全应用程序已出炉,Google Play Protect曝大冷门
  7. 8Manage轻松解决采购过程“脏乱差”问题
  8. Wormhole —— Docker 容器的服务连接代理
  9. 初识iptables规则
  10. 利用spring的CommonsMultipartResolver上传文件