【发布时间】:2016-10-29 12:04:49
【问题描述】:
我正在使用 uncrustify 来格式化一个充满 C 和 C++ 代码的目录。我需要确保 uncrustify 不会更改生成的代码;我无法对目标文件或二进制文件进行比较,因为目标文件具有时间戳,因此永远不会相同。我不能一一检查文件的来源,因为我会在这里多年。
该项目使用 make 进行构建过程,所以我想知道是否有某种方法可以输出可以检查的内容。
我搜索了 SO 和 Google 均无济于事,所以如果这是重复的,我深表歉意。
编辑:我正在使用 gcc/g++ 并为 32 位编译。
【问题讨论】:
-
您可以使用
objdump之类的命令反汇编二进制文件并进行比较。 -
“我无法对目标文件或二进制文件进行比较,因为目标文件有时间戳,因此永远不会相同。”
.o文件是否有嵌入的时间戳?我不知道。 -
时间戳是如何嵌入到目标文件中的?它可以以某种方式剥离吗?也许有二进制比较实用程序可以跳过或忽略它比较的文件中的某些字节范围,您是否尝试过寻找这样的实用程序?
-
实际上,在从目标文件中清除时间戳之后,您可以进行二进制比较。一个处理 PE/PDB 文件的示例程序是 zap_timestamps。
-
过去,我不得不比较应该相同的生成二进制文件(尽管出于不同的原因)。在这种情况下,我使用
objcopy从elf 文件中提取相关部分——.text、.data 等——并进行比较。诚然很乏味,但在这种情况下那行不通吗?
标签: c++ c format diff uncrustify