我有一个代码库(C和C ++),编译后会产生具有不同校验和的二进制文件,即使在二进制文件上运行strip
后也是如此。
以十六进制方式对二进制文件进行差异处理会产生以下几行:
位置1的二进制文件:
00000170: 0300 0000 474e 5500 7645 15ec 09f5 2b56 ....GNU.vE....+V
00000180: 0679 e9a4 d49d 29e0 7de8 fb5b 0300 0000 .y....).}..[....
位置2的二进制文件:
00000170: 0300 0000 474e 5500 cf2a 4316 2262 679d ....GNU..*C."bg.
00000180: 5691 b91a 52a8 29d2 45e8 c204 0300 0000 V...R.).E.......
在我看来,这必须是校验和或类似的东西。我怀疑是时间戳,除非我清理然后在同一目录中进行重建,二进制文件将具有相同的校验和。
有谁知道这可能是什么?我想确保我的二进制文件具有相同的校验和,即使在不同的位置构建它们也可以由我的QA组织进行验证。
答案 0 :(得分:4)
当睡觉紧张的学生说,不同的部分是build-id
。
您可以避免在链接上传递build-id
生成-Wl,--build-id=none
部分,也可以使用strip --remove-section=.note.gnu.build-id
将其从ELF中删除。