如果我们分发包含调试信息/符号的编译后的 C++ 可执行文件,与缺少调试信息的情况相比,这是否能让第三方了解更多有关编译程序的源代码的信息?
这个问题主要与使用 MSVC 编译的 C++ 专有代码的保护有关,但有关其他编译器和调试符号的信息通常也可以提供见解。
问题的一些背景:我们提供带有调试信息的可执行文件,以便在出现意外的程序状态时创建堆栈跟踪。
编辑:当然,我们在公司内部维护 PDB,以便能够在堆栈跟踪到达后读取它们。
我只知道微软的编译器......
PDB 将存储额外的信息(如果你真的关心的话,你真的应该剥离你的 pdb。)
https://msdn.microsoft.com/en-us/library/y87kw2fd.aspx
John Robbins 写了一些关于 PDB 以及如何使用它们的精彩文章,这里是一个开始:
https://www.atmosera.com/blog/pdb-files-what-every-developer-must-know/
希望你能继续前进...
基本上没有。所有调试信息都存储在 PDB 中,EXE 仅包含 PDB 的路径。
如果您担心,您可以随时使用十六进制编辑器浏览二进制代码,以查看 .EXE 中嵌入了哪些信息。每当我为新平台或使用一组新的开发工具进行构建时,我都会倾向于这样做。有时你会嵌入一些你并不真正想要的东西,但通常不是代码,更像是网络名称和路径。
可执行文件包含程序的代码。只要有足够的决心,它就可以被重建(看看周围关于某些计算机病毒如何工作的讨论,在那里你会看到刚刚获得可执行文件的人,在许多情况下甚至进行了加密和其他混淆,以使其更难以识别为恶意软件,弄清楚它是如何工作的)。
此外,复制可执行文件更容易,为什么要费心去了解它是如何编写的来编写克隆......