编译Go程序时,导入和包名会发生什么变化?



一旦编译了go程序,如果机器码反编译为汇编(或然后反编译为C),是否有任何方法可以提取包的名称(稍后在问题中解释)?

在go中,我们通常通过提供到repo的链接来导入包(如果是开源的)。例如:github.com/abc/abc

。这意味着库开发人员的用户名通常是包导入的一部分。现在,当程序被编译时,它们会发生什么?它们能否以某种方式从编译的二进制文件中提取出来?一般来说,我认为编译器应该把整个代码放在一个地方,然后它可以摆脱那些名字,但我不确定。这就是我问这个问题的原因。我之所以问这个问题,是因为在一种特殊情况下,如果包导入以某种方式包含在二进制文件中,它将导致严重的安全问题。

经过一番调查,我发现Go确实在二进制文件中包含了这些。我在文本编辑器中打开二进制文件,并试图查找repo名称。在文件的末尾,有一个很大的文本部分,其中包含了大量的文本信息。程序中使用的repos的名称也可以简单地查找。

这意味着,如果您正在从事需要隐藏尽可能多的信息的安全项目,则需要以某种方式小心这些信息。

最新更新