编辑:我在这里做了错误的假设,GCC工作正常,阅读下面的答案。
我在编译后的对象文件中找到开发计算机中的源代码、目录结构和其他随机数据片段,这些文件在链接后最终形成一个可执行文件。
当然,这只是来自编译器进程内存的随机数据,可能是重新使用的缓冲区,其中保存了源代码或其他文件,在重新使用之前没有正确清理。
在许多情况下,这不是问题,但有时泄漏会暴露得太多。我发现最有问题的是它的不可预测性:今天它揭示了一些不重要的库的来源,而明天它可能揭示一些私钥或类似的东西。
是否有一些常规的方法来防止这种情况发生,一些开关会强制GCC在使用之间清理缓冲区,或者其他一些解决方案?
编辑:
好的,下面是一个示例,通过编译qrcodegen.c,可以从:
https://github.com/nayuki/QR-Code-generator/tree/master/c
使用此命令行:
GCC-C-墙qrcodegen.C-O9-O qrcodegen.O
结果如下,查看偏移量0x668c:
https://drive.google.com/file/d/1WZRlCsjr4CALfi5pmsbd3fLeVsnnxGsa
如果链接到可执行文件,则显示该内容
在.rdata节中,您可以在对象文件中看到它。