昨天,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脚本(后部分是压缩后的程序二进制文件)。

linux下编译upx 3.93的更多相关文章

  1. linux下编译upx ucl

    昨天,UPX发布了3.93版本. UPX(the Ultimate Packer for eXecutables)是一个非常全面的可执行文件压缩软件,支持dos/exe.dos/com.dos/sys ...

  2. linux下编译eXosip、osip,以及UAC和UAS的例子

    从网站上看到了这样的一篇博文 :Windows下编译eXosip.osip,以及UAC和UAS的例子 (链接:http://www.cnblogs.com/dyllove98/archive/2013 ...

  3. linux下编译gcc6.2.0

    linux下编译gcc6.2.0 在archlinx的下gcc已经更新到6.2.1了,win10的WSL下还是gcc4.8.官方源没有比较新的版本,于是自己编译使用. GCC6的几个新特性 GCC 6 ...

  4. LINUX下编译安装PHP各种报错大集合

    本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...

  5. linux下编译安装vim7.4并安装clang_complete插件

    linux下编译安装vim7.4并安装clang_complete插件 因为debian里软件仓库中下载安装的vim是不支持python写的插件的(可以打开vim,在命令模式先输入:py测试一下),导 ...

  6. linux下编译出现空间不足解决办法

    linux下编译出现空间不足解决办法 编译内核出现问题: AS      .tmp_kallsyms1.o .tmp_kallsyms1.S:2: fatal error: when writing ...

  7. linux下编译安装curl

    linux下编译安装curl 1.下载curl git clone https://github.com/curl/curl.git 2.在curl目录下生成configure文件 ./buldcon ...

  8. 如何在Kali Linux下编译Windows Exploit

    前言 微软的Windows在企业或是个人应用领域占据着最大的市场份额,在渗透测试过程中你会经常遇到很多Windows的工作站和服务器.另一方面,大多数渗透测试人员主要使用基于Linux的发行版渗透测试 ...

  9. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

随机推荐

  1. cannot import name 'main' 解决方案

    error description: pip3 install numpy Traceback (most recent call last): File "/usr/bin/pip3&qu ...

  2. [转]Memcache的原理和命中率的总结

    From : http://blog.csdn.net/hbzyaxiu520/article/details/19546969 1       Memcache是什么Memcache是danga.c ...

  3. 【UOJ Round #1】

    枚举/DP+排列组合 缩进优化 QAQ我当时一直在想:$min\{ \sum_{i=1}^n (\lfloor\frac{a[i]}{x}\rfloor + a[i] \ mod\ x) \}$ 然而 ...

  4. SGU536 Berland Chess

    棋盘上白子只有一个国王  黑子给出 各子遵从国际象棋的走法 黑子不动,白子不能走进黑子的攻击范围以内 问白字能不能吃掉所有的黑子 直接搜索就好了,各子状态用二进制表示 不过每个子被吃之后攻击范围会改变 ...

  5. win8 中如何删除 共享文件夹 用户名和密码

    在访问共享文件夹时我们都喜欢选中记住用户名和密码,可是有时候密码输入错误或者密码修改了,这时就需要我们删除或则修改先前记住的用户名和密码记录. 首先进入:控制面板\所有控制面板项\凭据管理器 选择wi ...

  6. js中document.write的那点事

    document.write()方法可以用在两个方面:页面载入过程中用实时脚本创建页面内容,以及用延时脚本创建本窗口或新窗口的内容.该方法需要一个字符串参数,它是写到窗口或框架中的HTML内容.这些字 ...

  7. 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

    之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...

  8. 【Spark】Spark-foreachRDD需要注意的问题

    Spark-foreachRDD需要注意的问题 dstream.foreachRDD_百度搜索 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中 - 吾心光明 ...

  9. 文本分类(六):使用fastText对文本进行分类--小插曲

    http://blog.csdn.net/lxg0807/article/details/52960072 环境说明:python2.7.linux 自己打自己脸,目前官方的包只能在linux,mac ...

  10. 梯度消失(vanishing gradient)与梯度爆炸(exploding gradient)问题

    (1)梯度不稳定问题: 什么是梯度不稳定问题:深度神经网络中的梯度不稳定性,前面层中的梯度或会消失,或会爆炸. 原因:前面层上的梯度是来自于后面层上梯度的乘乘积.当存在过多的层次时,就出现了内在本质上 ...