Go程序编译后导入路径与包名的留存及提取问题
Go编译后包名与导入路径的留存问题
1. 编译后能否从反编译结果中提取包名?
默认用go build编译的Go程序,二进制文件里会附带调试信息和符号表,不管是反编译成汇编还是进一步转换为C,都能提取到包名。但如果编译时加上-ldflags="-s -w"参数,会直接移除符号表和调试信息,这种情况下反编译后基本无法再获取到包名。
2. 导入路径(含仓库链接)在编译后的处理与提取可能性?
默认编译的二进制文件中会保留完整的导入路径信息,像github.com/abc/abc这类带开发者用户名的仓库链接,能从符号表或调试信息里提取出来。如果是安全敏感场景,编译时加-ldflags="-s -w"就能删除这些信息;再配合-trimpath参数,还能把编译时的绝对路径替换成相对路径,进一步减少这类信息的留存。对安全要求极高的话,也可以用二进制混淆工具做进一步处理,彻底清除可识别的字符串信息。
内容的提问来源于stack exchange,提问作者Arnold Zahrneinder
相关产品推荐
相关产品推荐

