我正在使用GCC编译一些C代码。有没有办法剥去,例如来自目标文件的ELF头并使链接器添加头?或者,是否还有其他可能性来删除生成的目标文件大小而不是明显的-Os和-s标志?( - ffast-math,-fomit-frame-pointer,-shshort -doubles确实有助于减少代码大小但是有效目标文件显示了大量的“看似”无用的零。
像strip / sstrip这样的工具并没有多大用处,因为目标文件必须保留符号(稍后会链接它)。 (-strip-unneeded和-R .comment -R .gnu.version尽其所能。)
我正在做的是要求我将(压缩的)目标文件捆绑到用户并嵌入脚本以在用户端链接它的东西。每个字节都很重要!
答案 0 :(得分:1)
以后无法删除和恢复ELF标头,因为有价值的信息存储在那里然后永远丢失(例如某些表,架构等的文件偏移量.IIRC)。你已经列出了几乎所有可以减小尺寸的东西,除了bzip'ing。
答案 1 :(得分:0)
如果通过压缩算法运行目标文件,那些“大量零”应该缩小很多因素,因为它们的信息内容很少。你可能想要研究一个更好的压缩算法,也许它可以获得更多,而不是去修改/非标准的“黑客”目标文件格式,如果可能的话。
答案 2 :(得分:0)
您可以尝试使用-fdata-sections
,-ffunction-sections
和-Wl,--gc-sections
,但这不安全,因此请务必在使用它们之前了解它们的工作原理。