如何防止货物fmt更改已编译的二进制文件?

时间:2018-05-13 06:21:52

标签: linux rust binary-reproducibility

我使用rustfmt 0.4.1-stable重新格式化了我的代码库,并且有一个难以用眼睛检查的巨大差异。

很久以前,cargo fmt产生了巨大的差异后,我遇到了类似的问题。那时,我解决了它:

cargo build --release
strip -s target/release/mylib.so -o target/release/mylib-stripped.so
diff <(hexdump -C < target/release/mylib-stripped.so) <(hexdump -C < target/release/prev-mylib-stripped.so)

差异只是几个字节,看起来像时间戳,但这次hexdump / objdump输出之间的差异很大。

代码不同,例如:

                                        push   %r13
   188d3a:      41 54                   push   %r12
   188d3c:      53                      push   %rbx
-  188d3d:      48 81 ec 48 01 00 00    sub    $0x148,%rsp
-  188d44:      48 89 d3                mov    %rdx,%rbx
...
+  188d3d:      48 81 ec 88 06 00 00    sub    $0x688,%rsp
+  188d44:      4d 89 ce                mov    %r9,%r14
+  188d47:      4c 89 85 a0 fe ff ff    mov    %r8,-0x160(%rbp)
...

如何在cargo fmt之前和之后使构建可重现?

0 个答案:

没有答案