在golang项目中, 最终运行的是打包好的二进制文件,如何才能让这个文件尽可能的小呢?

1.编译阶段的参数处理

go build使用的是静态编译,会将程序的依赖一起打包,这样一来编译得到的可执行文件可以直接在目标平台运行,无需运行环境(例如 JRE)或动态链接库(例如 DLL)的支持。

使用ldflags传递参数:

在程序编译的时候可以加上-ldflags "-s -w"参数来优化编译,原理是通过去除部分链接和调试等信息来减小编译生成的可执行程序体积,具体参数如下:

  • -a:强制编译所有依赖包
  • -s:去掉符号表信息,不过panic的时候stace trace就没有任何文件名/行号信息了
  • -w:去掉DWARF调试信息,不过得到的程序就不能使用gdb进行调试了

可以看到添加-s参数时,可执行文件体积减小最多

若对符号表无需求,-ldflags直接添加"-s"即可

2.使用压缩工具upx

github: https://github.com/upx/upx

[安装]

# mac
brew install upx # centos
yum install upx # debian/ubuntu
apt install upx-ucl

[使用]

# 压缩
upx app # 解压缩
upx -d app

本地测试整体体积会减少一半左右, 至少压缩在30%以上的 , 且压缩后运行没有任何问题

下面是upx的一些常用参数:

  • -o:指定输出的文件名
  • -k:保留备份原文件
  • -1:最快压缩,共1-9九个级别
  • -9:最优压缩,与上面对应
  • -d:解压缩decompress,恢复原体积
  • -l:显示压缩文件的详情,例如upx -l main.exe
  • -t:测试压缩文件,例如upx -t main.exe
  • -q:静默压缩be quiet
  • -v:显示压缩细节be verbose
  • -f:强制压缩
  • -V:显示版本号
  • -h:显示帮助信息
  • --brute:尝试所有可用的压缩方法,slow
  • --ultra-brute:比楼上更极端,very slow

压缩工具之upx的更多相关文章

  1. pyinstall 把你的程序变成windows的可执行程序。py exe UPX

    我们先看一下这个官方文档 http://pythonhosted.org/PyInstaller/ 其实常用的也就是两句 pyinstall ***.py pyinstall -F ***.py 一: ...

  2. DOS基础使用专题(强烈推荐)

    DOS基础使用专题(强烈推荐) 美丽的DOS时代 DOS是世界上使用人数最多的操作系统,包括上面的Win3.x/9x等GUI操作平台的用户.尽管许多人由于种种原因而使用了其它非DOS的操作系统或操作环 ...

  3. 手脱UPX(3.91)

    1.使用Detect It Easy进行查壳: 2.使用x32dbg打开该带壳程序,在选项->选项->异常中添加区间设置0~FFFFFFFF全忽略: 3.我们F9运行到程序入口处,看到了p ...

  4. js 压缩工具总结

    随便百度一个 “js 压缩”,然后就会有各种代码压缩工具可供选择, 向来我就爱那种绚丽新颖的玩意,比如这家显示压缩比呀,或者那家可以查错呀什么的, 今天还为国民浏览器拥有鼠标手势(按住右键画个图形就有 ...

  5. Reverse Core 第二部分 - 14&15章 - 运行时压缩&调试UPX压缩的notepad

    @date: 2016/11/29 @author: dlive 0x00 前言 周六周日两天在打HCTF2016线上赛,没时间看书,打完比赛接着看~~ 0x01 运行时压缩 对比upx压缩前后的no ...

  6. 推荐15个最好用的 JavaScript 代码压缩工具

    JavaScript 代码压缩是指去除源代码里的所有不必要的字符,而不改变其功能的过程.这些不必要的字符通常包括空格字符,换行字符,注释以及块分隔符等用来增加可读性的代码,但并不需要它来执行. 在这篇 ...

  7. 13 个免费的 PNG 图像的优化和压缩工具

    图像格式有许多种不同类型,在互联网上最常见的有JPEG.GIF.BMP.TIFF和PNG.每一种图像格式都有它自己的用途,比如GIF是用于动画的,JPEG是用于高清图片的,这种图片在保存或者调整大小后 ...

  8. HTML Minifier - 灵活的在线 HTML 压缩工具

    HTML Minifier 是一个高度可配置的,经过良好测试的,基于 JavaScript 的 HTML 在线压缩工具,用棉绒般的能力.在它的核心, Minifier 依赖于 John Resig 的 ...

  9. 【hadoop】——压缩工具比较

    文件压缩主要有两个好处,一是减少了存储文件所占空间,另一个就是为数据传输提速.在hadoop大数据的背景下,这两点尤为重要,那么我现在就先来了解下hadoop中的文件压缩. hadoop里支持很多种压 ...

  10. seajs中spm压缩工具使用

    seajs是个好东西,用起来很方便,但是她的压缩工具spm确不被网友看好,因为使用起来很麻烦,捯饬了一天多,终于勉强能压缩了,这里就简单记录一下. 按照地址:http://www.zhangxinxu ...

随机推荐

  1. 千牛hook 旺旺hook,旺旺发消息call,千牛发消息call,千牛机器人,破解旺旺发消息代码,破解千牛发消息代码,反汇编旺旺发消息,反汇编千牛发消息,旺旺发消息组件,千牛发消息组件

    由于工作需要,做了相关的编码,有demo,拿去后,直接按demo写代码即可实现千牛发消息,非常稳定.非反汇编找call,基本不怕千牛升级,原理是基于千牛架构做出来的,除非千牛改架构,已稳定使用2年,未 ...

  2. 【YashanDB知识库】23.1.3.101版本创建物化视图coredump

    [标题]23.1.3.101版本创建物化视图coredump [问题分类]数据库错误 [关键词]YashanDB, 物化视图, coredump, dblink [问题描述]在23.1.3.101版本 ...

  3. 录音转文字SDK哪家强?

    最近在做一款录音App,有一个模块是录音转文字功能,于是对比了市面上常见的API,国内做的比较大的主要有讯飞.腾讯.阿里.百度.华为. 讯飞 讯飞在国内做语音SDK是做的比较早的,翻译出来的准确率挺不 ...

  4. sql语句去掉前面的0(前导零,零前缀)

    sql还有个stuff的函数,很强悍. 一个列的格式是单引号后面跟着4位的数字,比如'0003,'0120,'4333,我要转换成3,120,4333这样的格式,就是去掉单引号和前导的0,用以下语句就 ...

  5. 免费在线OCR识别工具TextIn Tools,开启智能学习新时代

    传统的学习方式,笔记必须手写摘抄:带字照片只能插入文档:PDF转换要花钱买会员-- 而在线OCR识别工具tools.textin.com,既好用又免费,它不仅仅具有文字和表格识别工具,还包含PDF转文 ...

  6. 服务器文件打压缩包下载(java)

    public void download(HttpServletRequest request, HttpServletResponse response){ try { String downloa ...

  7. 在 macOS上安装 MongoDB 社区版

    官网教程 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ 使用第三方 brew package manager 在 ...

  8. kmemleak 和kasan 的区别

    kmemleak 和kasan 都是 Linux 内核中的一些工具和特性,用于帮助进行内存错误检测和修复.然而,它们之间有一些区别: 功能:kmemleak 用于检测内核中未释放的内存泄漏,它可以跟踪 ...

  9. Java日期时间API系列25-----Jdk8中java.time包中的新的日期时间API类,使用MonthDay计算十二星座。

    通过Java日期时间API系列24-----Jdk8中java.time包中的新的日期时间API类,MonthDay类源码和应用,对比相同月日时间.对MonthDay简单做了说明和应用.十二星座是根据 ...

  10. CE-植物大战僵尸杂交版

    植物大战僵尸杂交版 偏移:208+82c