首先说一下,我编译 go 源码的时候,只是简单的 go build,没有带额外参数 然后我放到 linux 服务器上,使用 gdb list,然后就看到源码了。 类似如下:
(gdb) list 1
1 package main
2
3 import (
4 "uvs/config"
5 "uvs/db"
6 "uvs/httpserver"
7 "uvs/log"
8 "uvs/model"
9 "fmt"
10 "github.com/sirupsen/logrus"
现在问题来了,是不是说,我完全可以通过 gdb 或类似的工具获取常规方法编译的 go 二进制文件中的***全部源码***?
1
manami 2019-12-27 15:35:07 +08:00 via Android
在 linux 服务器端看到源码正常,别人又不能看到。如果是客户端看到源码(反编译)也正常,把核心逻辑代码放在服务器端就行。
|
2
sabermiao 2019-12-27 15:37:28 +08:00 2
By default, go build combines symbol and debug info with binary files. However, you can remove the symbol and debug info with go build -ldflags "-s -w".
编译的时候去掉符号和调试信息就行了 |
3
lishunan246 2019-12-27 15:38:33 +08:00 via Android
默认编译的是 release with debug info。
不想要的话 go build -ldflags "-s" |
4
zhve2x4 OP 为什么今天我发这个主题,因为有个悲催的事情,我的源码被删了,但是二进制还在,我想从二进制获取 go 的源码。
|
5
cmdOptionKana 2019-12-27 15:43:38 +08:00
这年头写程序不用 git 之类的,会有如履薄冰的危险感……
|
6
fuxiaohei 2019-12-27 15:45:18 +08:00
各种常量、文本等很容易找到。但是你要从二进制还原到代码,非常困难啊
|
7
zhve2x4 OP @cmdOptionKana 已经用了 git,但是没有 push 到服务器,服务器上的代码比较旧,参考价值不大。然后我不知道脑子哪根筋不对,直接 rm -rf 删了本地代码( linux 桌面的)。
|
8
learnshare 2019-12-27 15:49:30 +08:00
@zhve2x4 用 Git 不同步到远端,哪来安全性可言
|
9
tiedan 2019-12-27 15:50:19 +08:00
清除符号表和调试信息
|
10
ylsc633 2019-12-27 16:01:15 +08:00
"为什么今天我发这个主题,因为有个悲催的事情,我的源码被删了,但是二进制还在,我想从二进制获取 go 的源码。"
对不起, 我还是笑出了声... 目前我不知道怎么解决你的问题! 不过以后,如果你自己的代码,实在不想别人看见,可以在 github 建个私有的包.. 这种只保存在本地... 实在是太不保险了 |
11
Immortal 2019-12-27 16:06:57 +08:00
用啥写的代码 goland 一类有本地 history
|
12
ck65 2019-12-27 16:16:05 +08:00
gitlab.com 无限免费私有仓库它不香吗?
|