成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go1.18 新特性:編譯后的二進制文件,將包含更多信息

開發 前端
日常中很難從 Go 二進制文件中檢索元信息,要么是信息完全缺失,要么提取需要對二進制文件進行大量解析。

大家好,我是煎魚。

我有一個朋友,,開開心心入職,想著施展拳腳,第一個任務就是對老舊的二進制文件進行研究。

他一看,這文件,不知道是編譯器用什么參數,是怎么編譯出來的,環境不知道是什么,更不知道來自什么代碼分支?

這除了是項目流程上的問題外,Go 在這塊也有類似的小問題,處理起來比較麻煩。

背景

日常中很難從 Go 二進制文件中檢索元信息,要么是信息完全缺失,要么提取需要對二進制文件進行大量解析。

包含的元信息如下:

元信息

提取處

Go 構建版本

符號表,通過全局變量 ??runtime.buildVersion?? 來獲取

構建信息,例如:模塊和版本

符號表,通過全局變量 ??runtime/debug.modinfo?? 來獲取

編譯器選項,例如:構建模式、編譯器、gcflags、ldflags 等

無法獲取

用戶定義的自定義數據,例如:應用程序版本等

需在編譯時設置全局字符串變量,才可以獲取

關注到編譯器選項,也就是參數等都是無法得知的,也就是會提高獲取如何編譯出來的難度。

新提案

Michael Obermüller 提出了一個新的提案《cmd/go: add compiler flags, relevant env vars to 'go version -m' output》用于解決上述問題。

在提案中想要的是 JSON 格式的結構輸出:

{
"version": "go1.13.4",
"compileropts": {
"compiler": "gc",
"mode": "pie",
"os": "linux",
...
},
"buildinfo": {
"path": "腦子進煎魚了",
"main": {
"path": "HelloWorld",
"version": "(devel)",
},
"deps": []
},
"user": {
"customkey": "customval",
...
}
}

Russ Cox 表示由于編譯信息已有既有格式,并且默認使用 JSON 只會讓二進制文件變得更大。好處少,沒必要,改為了選項化的支持。

新的 Go1.18 版本中,可以通過既有的:

go version -m

查看到提案所提到的信息。

例如:

$ gotip version
go version devel go1.18-eba0e866fa Mon Oct 18 22:56:07 2021 +0000 darwin/amd64
$ gotip build ./
$ gotip version -m ko
...
build compiler gc
build tags goexperiment.regabiwrappers,goexperiment.regabireflect,goexperiment.regabiargs
build CGO_ENABLED true
build CGO_CPPFLAGS
build CGO_CFLAGS
build CGO_CXXFLAGS
build CGO_LDFLAGS
build gitrevision 6447264ff8b5d48aff64000f81bb0847aefc7bac
build gituncommitted true

若需要輸出 JSON 格式,也可以通過指定 go version -json 達到一樣的效果。

在上面的輸出中,現有的編譯器選項等都會包含在內,能夠讓大家對整體編譯后的二進制文件溯源有一個更好的認知。

總結

在今天這篇文章中,給大家介紹了 Go1.18 的一個新的變化。

新版本中,編譯器選項/參數、相關環境變量等,將會包含在編譯后的二進制文件中,能夠更便于后人排查和查看信息。

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2022-02-11 21:01:18

GoNetip網絡庫

2022-01-26 09:02:57

GoCut方法

2022-01-19 08:51:00

Module工作區Go

2022-02-14 09:32:49

Go場景TryLock

2021-12-02 18:21:49

GoIP 包設計

2021-12-27 18:27:18

GoTryLockJava

2022-02-16 08:59:43

Go方法Title

2025-05-12 08:58:14

GoDWARF5二進制

2020-05-22 18:00:26

Go二進制文件編程語言

2021-12-28 07:20:44

泛型Go場景

2024-10-30 09:50:51

WebGo語言

2024-01-31 09:55:53

2009-08-12 18:06:53

C#讀取二進制文件

2009-12-16 10:49:42

Ruby操作二進制文件

2009-02-27 09:37:33

Google二進制代碼

2020-10-19 11:35:47

Ghidra逆向分析G

2009-12-10 09:24:50

PHP函數fwrite

2023-09-18 23:50:25

二進制文件裁剪Layout

2021-12-15 12:59:56

Go泛型版Beta1

2020-10-21 09:49:31

Ghidra逆向分析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品一区 | 日韩中文字幕一区 | 免费在线观看一区二区 | 99久久久国产精品 | 亚洲午夜在线 | 国产精品特级毛片一区二区三区 | 久久骚| 欧美激情视频网站 | 国产在线精品一区二区 | 亚洲国产欧美日韩 | 精品综合视频 | 日韩在线电影 | 在线看片网站 | 国产一区二区三区www | 欧美一二区 | 国产黄色在线观看 | 99久久久国产精品 | 91精品国产91久久久久青草 | 精品免费视频一区二区 | av手机在线免费观看 | 美女天天操 | 国产精品中文字幕在线 | 五月天国产在线 | 国产精品久久久久久影院8一贰佰 | 成人在线视频免费观看 | 久久久久久久综合色一本 | 国产精品成人一区二区三区吃奶 | 亚洲社区在线 | 欧州一区二区三区 | 亚洲精品视频一区 | 日本精品免费在线观看 | 草久久| 中文在线观看视频 | 免费视频成人国产精品网站 | 久久99久久 | 国产精品夜夜夜一区二区三区尤 | 成人综合一区 | 日韩中文不卡 | 理论片午午伦夜理片影院 | 日韩中文字幕在线播放 | 一区二区在线免费观看视频 |