综合
Go1.18 新特性:编译后的二进制文件,将包含更多信息
Posts on 煎é±0 次浏览
大家好,我是煎鱼。 我有一个朋友,,开开心心入职,想着施展拳脚,第一个任务就是对老旧的二进制文件进行研究。 他一看,这文件,不知道是编译器用什么参数怎么打出来的,环境不知道是什么,更不知道来自什么代码分支? 这除了是项目流程上的问题外,Go 在这块也有类似的小问题,处理起来比较麻烦。 背景 日常中很难从 Go 二进制文件中检索元信息,要么是信息完全缺失,要么提取需要对二进制文件进行大量解析。 包含的元信息如下: 元信息 提取处 Go 构建版本 符号表,通过全局变量 runtime.buildVersion 来获取 构建信息,例如:模块和版本 符号表,通过全局变量 runtime/debug.modinfo 来获取 编译器选项,例如:构建模式、编译器、gcflags、ldflags 等 无法获取 用户定义的自定义数据,例如:应用程序版本等 需在编译时设置全局字符串变量,才可以获取 关注到编译器选项,也就是参数等都是无法得知的,也就是会提高获取如何编译出来的难度。
原文:https://eddycjy.com/posts/go/118-build-info/