校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 減少 golang 二進制文件大小操作

減少 golang 二進制文件大小操作

熱門標簽:杭州人工智能電銷機器人費用 400開頭電話怎樣申請 貴州電話智能外呼系統 利用地圖標注位置 江蘇呼叫中心外呼系統有效果嗎 官渡電銷外呼管理系統怎么收費 谷歌美發店地圖標注 赤峰電銷 地圖區域圖標注后導出

環境:

$ go version
go version go1.11.2 linux/amd64

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609

一. Go VS C 二進制

hello.go

package main
import "fmt"
func main() {
 fmt.Println("hello world")
}

hello.c

#include stdio.h>
int main() {
 printf("hello world\n");
 return 0;
}
$ go build -o hello hello.go
$ go build -ldflags "-s -w" -o hello2 hello.go
$ gcc hello.c
$ ls -l
-rwxrwxr-x 1 zengxl zengxl 1902849 11月 27 15:40 hello
-rwxrwxr-x 1 zengxl zengxl 1353824 11月 27 15:43 hello2
-rwxrwxr-x 1 zengxl zengxl 8600 11月 27 15:44 a.out

golang 連接的參數:

$ go tool link -h

usage: link [options] main.o
-s disable symbol table  # 去掉符號表
-w disable DWARF generation # 去掉調試信息

ELF

先來看下 C 的:

$ readelf -h a.out 
ELF 頭:
 Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
 類別:        ELF64
 數據:        2 補碼,小端序 (little endian)
 版本:        1 (current)
 OS/ABI:       UNIX - System V
 ABI 版本:       0
 類型:        EXEC (可執行文件)
 系統架構:       Advanced Micro Devices X86-64
 版本:        0x1
 入口點地址:    0x400430
 程序頭起點:   64 (bytes into file)
 Start of section headers:   6616 (bytes into file)
 標志:    0x0
 本頭的大小:  64 (字節)
 程序頭大小:  56 (字節)
 Number of program headers:   9
 節頭大小:   64 (字節)
 節頭數量:   31
 字符串表索引節頭: 28
$ readelf -d a.out 

Dynamic section at offset 0xe28 contains 24 entries:
 標記  類型       名稱/值
 0x0000000000000001 (NEEDED)    共享庫:[libc.so.6]
 0x000000000000000c (INIT)    0x4003c8
 0x000000000000000d (FINI)    0x4005b4
 0x0000000000000019 (INIT_ARRAY)   0x600e10
 0x000000000000001b (INIT_ARRAYSZ)  8 (bytes)
 0x000000000000001a (FINI_ARRAY)   0x600e18
 0x000000000000001c (FINI_ARRAYSZ)  8 (bytes)
 0x000000006ffffef5 (GNU_HASH)   0x400298
 0x0000000000000005 (STRTAB)    0x400318
 0x0000000000000006 (SYMTAB)    0x4002b8
 0x000000000000000a (STRSZ)    61 (bytes)
 0x000000000000000b (SYMENT)    24 (bytes)
 0x0000000000000015 (DEBUG)    0x0
 0x0000000000000003 (PLTGOT)    0x601000
 0x0000000000000002 (PLTRELSZ)   48 (bytes)
 0x0000000000000014 (PLTREL)    RELA
 0x0000000000000017 (JMPREL)    0x400398
 0x0000000000000007 (RELA)    0x400380
 0x0000000000000008 (RELASZ)    24 (bytes)
 0x0000000000000009 (RELAENT)   24 (bytes)
 0x000000006ffffffe (VERNEED)   0x400360
 0x000000006fffffff (VERNEEDNUM)   1
 0x000000006ffffff0 (VERSYM)    0x400356
 0x0000000000000000 (NULL)    0x0

再來看下 go 的:

$ readelf -h hello
ELF 頭:
 Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
 類別:        ELF64
 數據:        2 補碼,小端序 (little endian)
 版本:        1 (current)
 OS/ABI:       UNIX - System V
 ABI 版本:       0
 類型:        EXEC (可執行文件)
 系統架構:       Advanced Micro Devices X86-64
 版本:        0x1
 入口點地址:    0x451fa0
 程序頭起點:   64 (bytes into file)
 Start of section headers:   456 (bytes into file)
 標志:    0x0
 本頭的大小:  64 (字節)
 程序頭大小:  56 (字節)
 Number of program headers:   7
 節頭大小:   64 (字節)
 節頭數量:   13
 字符串表索引節頭: 3

$ readelf -d hello

There is no dynamic section in this file.

The linker in the gc toolchain creates statically-linked binaries by default. All Go binaries therefore include the Go runtime, along with the run-time type information necessary to support dynamic type checks, reflection, and even panic-time stack traces.

A simple C “hello, world” program compiled and linked statically using gcc on Linux is around 750 kB, including an implementation of printf. An equivalent Go program using fmt.Printf weighs a couple of megabytes, but that includes more powerful run-time support and type and debugging information.

所以,為什么 go 二進制比 C 大很多就比較明顯了。

golang 靜態編譯,不依賴動態庫。

二. 如何減小 go 二進制文件大小

2.1. -ldflags

上面已經提到了過了。

$ go build -ldflags "-s -w" xxx.go

2.2. UPX

https://github.com/upx/upx

Commands:
 -1  compress faster     -9 compress better
 -d  decompress      -l list compressed file
 -t  test compressed file    -V display version number
 -h  give more help     -L display software license
Options:
 -q  be quiet       -v be verbose
 -oFILE write output to 'FILE'
 -f  force compression of suspicious files
 -k  keep backup files
file.. executables to (de)compress

Compression tuning options:
 --brute    try all available compression methods  filters [slow]
 --ultra-brute  try even more compression variants [very slow]

$ upx --brute binaryfile

IDA 逆向分析簡單看下:

https://www.hex-rays.com/products/ida/support/download.shtml

下面是支持 Go 的 IDA helper

https://github.com/sibears/IDAGolangHelper

原始的 go 二進制文件:

可以看到 go 的一些函數名。

去掉符號表和調試信息的 go 二進制文件:

已經看不到函數名信息,只有類似 sub_47BF70 這樣。

經過 upx 壓縮的 go 二進制文件:

信息已經比較少了,入口點也發生了變化。

2.3. 壓縮結果對比

$ go build -o hello hello.go
$ go build -ldflags "-s -w" -o hello-strip hello.go
$ upx --brute hello
$ ll -h
-rwxr-xr-x 1 aland aland 1.9M Dec 6 13:06 hello
-rwxr-xr-x 1 aland aland 809K Dec 6 13:07 hello-upx
-rwxr-xr-x 1 aland aland 1.3M Dec 6 13:06 hello-strip

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang中struct和[]byte的相互轉換示例
  • Golang二進制文件混淆保護操作
  • 淺談golang二進制bit位的常用操作
  • Golang如何交叉編譯各個平臺的二進制文件詳解
  • Golang如何實現任意進制轉換的方法示例
  • golang 將[]byte轉成16進制的實現

標簽:鷹潭 松原 泰安 河池 黔西 宜春 武漢 保定

巨人網絡通訊聲明:本文標題《減少 golang 二進制文件大小操作》,本文關鍵詞  減少,golang,二進制,文件,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《減少 golang 二進制文件大小操作》相關的同類信息!
  • 本頁收集關于減少 golang 二進制文件大小操作的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    久久综合色一综合色88| 91精品国产综合久久精品app | 一区二区三区免费在线观看| 香港成人在线视频| 国产999精品久久久久久绿帽| 欧美三级欧美一级| 国产精品成人午夜| 欧美一级日韩一级| 成人h精品动漫一区二区三区| 国产欧美精品一区二区三区四区| 大胆欧美人体老妇| 亚洲一二三专区| 久久精子c满五个校花| 成人精品鲁一区一区二区| 亚洲视频免费看| 在线观看中文字幕不卡| 精品一区二区三区影院在线午夜| 国产视频一区二区在线观看| 91视频免费看| 国产精品一卡二卡在线观看| 一区二区三区日韩| 国产精品色哟哟网站| 在线免费视频一区二区| 黄色成人免费在线| 天堂av在线一区| 国产精品―色哟哟| 亚洲精品一区二区三区蜜桃下载 | 中文字幕亚洲一区二区av在线| 3d动漫精品啪啪一区二区竹菊| av激情综合网| 亚洲国产精品一区二区久久| 精品噜噜噜噜久久久久久久久试看| 国产精品久久久久天堂| 在线视频国内自拍亚洲视频| 久久综合九色综合欧美就去吻| 午夜视频在线观看一区二区| 亚洲乱码中文字幕| 99久久免费国产| 中文字幕亚洲在| 色一情一伦一子一伦一区| 亚洲精品国产无套在线观| 色综合久久综合网欧美综合网| 亚洲精品国久久99热| 欧美亚洲日本国产| 日本欧美韩国一区三区| 国产欧美精品一区二区色综合| 91精品婷婷国产综合久久竹菊| 7777精品伊人久久久大香线蕉完整版| 91久久精品一区二区| 欧美影院精品一区| 欧美一区二区美女| 精品成人一区二区三区| 久久久噜噜噜久噜久久综合| 久久日韩精品一区二区五区| 久久久久免费观看| 一区二区免费视频| 日韩精品久久理论片| 美女在线视频一区| 97精品超碰一区二区三区| 在线亚洲免费视频| 91精品国产综合久久精品性色| 久久品道一品道久久精品| 日韩码欧中文字| 日本三级亚洲精品| 97se亚洲国产综合自在线观| 欧美日韩激情在线| 欧美电影免费提供在线观看| 亚洲区小说区图片区qvod| 秋霞电影一区二区| 91一区二区在线| 久久女同精品一区二区| 另类的小说在线视频另类成人小视频在线| 91黄视频在线| 8x8x8国产精品| 91麻豆免费看| 亚洲视频一区二区在线| 精品电影一区二区| 91网上在线视频| 91精品国产福利在线观看| 成人av在线一区二区三区| 午夜精品免费在线| 国产精品成人在线观看| 欧美xxxx老人做受| 欧美日韩一区二区三区高清| jiyouzz国产精品久久| 日日摸夜夜添夜夜添国产精品| 亚洲欧洲日产国码二区| 麻豆成人91精品二区三区| 欧美一区二区三区四区视频| 亚洲国产成人av网| 在线看不卡av| 亚洲一区在线电影| 日韩亚洲欧美中文三级| 日本欧美一区二区三区| 日韩亚洲国产中文字幕欧美| 亚洲一区二区三区在线看| 91麻豆福利精品推荐| 中文字幕亚洲欧美在线不卡| 91蝌蚪国产九色| 亚洲一区在线观看视频| 色94色欧美sute亚洲线路一ni| 一区二区三区免费看视频| 在线亚洲一区二区| 久久99在线观看| 中文字幕欧美区| 欧美亚洲国产bt| 蜜臀av性久久久久av蜜臀妖精| 国产亚洲成aⅴ人片在线观看| 国产乱子轮精品视频| 国产精品久久一卡二卡| 4438成人网| aa级大片欧美| 天天射综合影视| 欧美性一级生活| 日产国产欧美视频一区精品| 亚洲六月丁香色婷婷综合久久| 国产亚洲美州欧州综合国| 久久99久久久久| 久久久久久久久久电影| 中文一区二区在线观看| 国产一区二三区| 国产日产亚洲精品系列| 色老汉一区二区三区| 一本色道久久综合精品竹菊| 色哟哟一区二区| 在线这里只有精品| 欧美午夜精品电影| 欧美高清性hdvideosex| 这里只有精品99re| 欧美成人a∨高清免费观看| 精品va天堂亚洲国产| 久久久美女艺术照精彩视频福利播放 | 久久国产精品区| 日韩av一区二区三区| 视频一区二区三区在线| 偷拍一区二区三区| 免费在线看一区| 国产真实乱子伦精品视频| 乱中年女人伦av一区二区| 亚洲成人免费看| 国产夫妻精品视频| av电影一区二区| 欧美性猛交一区二区三区精品| 日本高清无吗v一区| 色欧美88888久久久久久影院| 99国产精品国产精品久久| 91国产精品成人| 欧美不卡一二三| 亚洲欧美日韩中文字幕一区二区三区 | 极品少妇xxxx精品少妇偷拍| 激情深爱一区二区| 91麻豆文化传媒在线观看| 色综合天天狠狠| 精品久久久久99| 成人免费在线视频| 日韩在线一区二区三区| 美女脱光内衣内裤视频久久网站| 色婷婷av一区二区三区之一色屋| 国产精品欧美久久久久无广告| 国产河南妇女毛片精品久久久 | 91精品欧美福利在线观看| 欧美一区二区三区视频免费播放 | 亚洲精品国久久99热| 中文在线免费一区三区高中清不卡| 久久亚洲精品国产精品紫薇| 亚洲精品视频自拍| 老司机午夜精品99久久| 在线观看不卡视频| 欧美经典三级视频一区二区三区| 午夜亚洲国产au精品一区二区| 国产成人在线影院| 亚洲mv在线观看| 国产一区高清在线| 欧美国产日韩精品免费观看| 日韩va亚洲va欧美va久久| 91免费看视频| 亚洲国产精品嫩草影院| 91色在线porny| 麻豆成人免费电影| 91色porny| 精品国产免费久久| 亚洲精品日韩一| 国产成人精品午夜视频免费| 国产一区二区影院| 亚洲国产一区二区a毛片| 91精品国产色综合久久不卡蜜臀| 免费成人在线网站| 天天综合色天天综合色h| 欧美a级理论片| 96av麻豆蜜桃一区二区| 麻豆视频一区二区| 久久精品免视看| 91在线视频网址| 午夜欧美大尺度福利影院在线看| 国产精品一区专区| 亚洲午夜免费福利视频| 欧美一区二区三区日韩视频| 91免费版在线| 99精品视频在线观看免费| 五月天亚洲婷婷|