婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 減少 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 二進制文件大小操作的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产色婷婷亚洲99精品小说| 亚洲大型综合色站| 久久精品视频免费观看| 日本欧美在线看| 欧美日韩综合色| 丝瓜av网站精品一区二区| 欧美在线高清视频| 亚洲电影第三页| 精品福利视频一区二区三区| 久久机这里只有精品| 中文无字幕一区二区三区| 成人午夜又粗又硬又大| 欧美国产精品一区二区| 美女网站色91| 中文字幕av不卡| 日韩欧美国产系列| 色综合久久久久久久久| 奇米影视在线99精品| 国产精品成人网| 欧美大片一区二区| 欧美日韩国产在线播放网站| 国产一区二区调教| 日本午夜精品一区二区三区电影| 中文字幕亚洲区| 欧美国产日韩一二三区| 日韩视频123| 欧美性videosxxxxx| 色呦呦国产精品| 国产传媒久久文化传媒| 石原莉奈在线亚洲三区| 一区二区三区精品视频| 久久精品免费在线观看| 538prom精品视频线放| 色婷婷久久一区二区三区麻豆| 国产91丝袜在线18| caoporn国产一区二区| 国产成人在线网站| 日本不卡在线视频| 蜜臀91精品一区二区三区 | 国产在线精品视频| 日韩黄色免费电影| 亚洲国产日韩av| 亚洲欧美乱综合| 丝袜诱惑制服诱惑色一区在线观看| 欧美高清一级片在线观看| 精品国产乱码91久久久久久网站| 欧美猛男超大videosgay| 欧美xxxxx牲另类人与| 色八戒一区二区三区| 欧美一区二区三区视频| 欧美日韩精品免费观看视频| 色狠狠av一区二区三区| 色婷婷久久一区二区三区麻豆| 欧洲日韩一区二区三区| 欧美va日韩va| 亚洲成人激情社区| 99国内精品久久| 欧美人体做爰大胆视频| 日韩视频免费观看高清在线视频| 久久免费视频一区| 久久精品亚洲一区二区三区浴池| 亚洲国产日韩a在线播放| 视频在线观看91| 在线观看一区二区视频| 精品国产成人系列| 亚洲美女视频一区| 99视频在线精品| 26uuu成人网一区二区三区| 免费精品99久久国产综合精品| 成人性生交大片免费看视频在线| 欧美久久免费观看| 亚洲综合激情另类小说区| 成人免费视频一区二区| 91精品国产色综合久久久蜜香臀| 久久一区二区三区四区| 日韩中文字幕区一区有砖一区| 成人高清免费在线播放| 欧美成人伊人久久综合网| 精品一区二区在线视频| 国产亚洲一区二区三区四区| www.av亚洲| 亚洲成人一二三| 日韩精品在线一区| 国产在线精品一区二区三区不卡| 国产欧美日韩另类一区| 成人av免费在线播放| 亚洲国产一区在线观看| 国产成人综合精品三级| 国产精品美女久久久久久2018 | 久久综合久久综合久久综合| 国产酒店精品激情| 亚洲码国产岛国毛片在线| 日韩视频国产视频| 欧美性猛交xxxx乱大交退制版| 国产一区二区三区久久久| 亚洲人成伊人成综合网小说| 7777精品伊人久久久大香线蕉超级流畅 | 午夜精品视频一区| 久久九九久久九九| 欧美高清视频一二三区| 色吧成人激情小说| 99精品欧美一区| 国产精品一区二区不卡| 国产精品一二三四区| 狠狠色2019综合网| 久久精品国产在热久久| 蜜臀久久久久久久| 久久99精品久久久久久久久久久久 | 欧美日韩色一区| 欧美天堂一区二区三区| 91精品国产综合久久久久久久久久| 欧美三级视频在线| 欧美日韩亚洲综合一区 | 成人av网站在线| 日本韩国一区二区三区| 在线观看av一区二区| 欧美日韩一级视频| 日韩精品一区在线观看| 国产精品污污网站在线观看| 国产精品三级视频| 婷婷国产在线综合| 国产美女视频91| 91精品福利视频| 欧美乱熟臀69xxxxxx| 久久婷婷综合激情| 亚洲猫色日本管| 视频一区中文字幕国产| 成人v精品蜜桃久久一区| 94色蜜桃网一区二区三区| 在线亚洲欧美专区二区| 日韩欧美一区电影| 中文字幕一区av| 蜜臀va亚洲va欧美va天堂| jvid福利写真一区二区三区| 欧美图片一区二区三区| 国产欧美日韩另类一区| 久久99精品久久久久婷婷| 在线观看av不卡| 亚洲国产精品久久久男人的天堂| 五月婷婷综合激情| 九九在线精品视频| 91日韩在线专区| 久久女同精品一区二区| 亚洲一区二区3| 成人h动漫精品| 中文字幕亚洲综合久久菠萝蜜| 久久99精品国产91久久来源| 91免费版在线| 91精品国产综合久久精品图片| 丁香六月综合激情| 精品国产一区二区在线观看| 亚洲激情欧美激情| 成人av电影在线观看| 一区视频在线播放| 国产成人在线视频免费播放| 久久精品这里都是精品| 国产成人av电影在线| 亚洲国产精品黑人久久久| 丰满亚洲少妇av| 亚洲欧洲精品一区二区三区不卡| 亚洲午夜精品一区二区三区他趣| 日韩av中文字幕一区二区三区| 欧美在线免费观看亚洲| 亚洲一区在线观看视频| 欧美一区午夜视频在线观看| 国产一区二区伦理| 亚洲男人的天堂一区二区| 91精品国产综合久久久久久漫画| 韩国理伦片一区二区三区在线播放 | 国产婷婷色一区二区三区| 成人免费毛片a| 久久99精品国产麻豆婷婷| 欧美中文字幕一区| 亚洲六月丁香色婷婷综合久久| 91在线精品一区二区| 天天综合色天天综合色h| 国产精品对白交换视频| 日韩免费高清电影| 欧美影院一区二区| 91一区在线观看| 成人性生交大片免费| 九九**精品视频免费播放| 亚洲午夜视频在线| 亚洲视频香蕉人妖| 日韩二区三区四区| 久久亚洲综合色| 日韩欧美国产一二三区| 欧美午夜精品久久久久久超碰| 成人免费高清视频| 91女厕偷拍女厕偷拍高清| 国产精品一区二区无线| 国产精品一区久久久久| 成人高清视频在线| 99精品视频在线观看| 色视频成人在线观看免| 在线成人免费观看| 国产精品视频观看| 亚洲一区在线视频观看| 蜜臀国产一区二区三区在线播放| 国产一区亚洲一区|