剥离二进制/精灵程序有什么意义?

12 linux application binary

我只是想知道剥离程序文件是否比仅仅节省磁盘空间有更多的好处。

Chr*_*ell 10

对于绝大多数情况,主要好处只是节省磁盘空间。第二个更可疑的好处是,它也使二进制文件更难以拆卸或逆向工程。它还可以稍微减少内存占用,但在许多情况下,它的节省可以忽略不计。

最大的缺点是,如果遇到问题,它会使调试变得更加困难。

在具有 CPU 速度和内存/磁盘数量的现代系统上,剥离二进制文件对性能几乎没有任何实际影响。这真的是关于调试、“清洁”和个人喜好。有些人更喜欢始终将剥离的二进制文件用于生产或“交付”软件。有些人喜欢始终保留符号,“以防万一”。

就个人而言,我更喜欢包含符号。一年来,我遇到过几次非常令人沮丧的情况,其中商业应用程序出现段错误(或以其他方式崩溃)并且我无法查明问题出在哪里,因为二进制文件被剥离了。至少在其中一些情况下,供应商最终向我发送了一个未剥离的版本来运行,直到它再次崩溃,因此我们可以获得更多有用的调试信息。如果他们一开始就提供未剥离的版本,我们本可以更快地解决问题并减少停机时间。

  • 同意,除非您使用的是内存受限的嵌入式系统,例如 32MB NSLU2。在这些场景中,RAM 中的每个字节都计数并且将二进制文件减少 10% 是非常常见的。我同样将 gdb 附加到一个垂死或死亡的进程,如果没有未剥离的符号,它本来会变成一条小溪。我的看法是剥离符号**仅**用于内存保护和更好的缓存线使用。但是测试后者,因为优化可能会忽略您的期望。 (3认同)
  • 你提出了一个很好的观点。我的上述评论适用于典型的台式机/笔记本电脑或服务器使用场景,但剥离二进制文件在嵌入式和特殊用途系统中通常是一个巨大的胜利。 (2认同)

Bra*_*sie 1

您可以使用调试符号编译软件以进行测试,然后将它们删除以进行部署。如果您的调试符号暴露了您不想暴露的东西,这可能对您有用