首页 > 解决方案 > “FunT”的 Beam 文件格式

问题描述

我们使用的是 Erlang 版本 22。我们多次重建 Beam 文件。在 Beam 文件中,我们发现“FunT”中的最后 4 个字节和“LitT”之前的字节总是在变化(每个版本之间不同)。是否有关于如何生成最后 4 个字节的任何解释?由于这些变化的 4 个字节,Beam 图像的校验和在构建后总是不同的构建。

    00000260: 4675 6e54 0000 001c 0000 0001 0000 0013  FunT............
    00000270: 0000 0001 0000 0011 0000 0000 0000 0001  ................
    00000280: 0432 95c1 4c69 7454 0000 00c3 0000 00f6  .2..LitT........

标签: erlangbeam

解决方案


我所知道的 BEAM 文件格式的最佳参考是这个。这四个字节是每个 lambda 函数的“旧唯一”值。它是在这里生成的,使用模块的 MD5 和的一部分。

奇怪的是,如果模块中没有其他内容发生变化,该位会发生变化。我最好的猜测是将deterministic选项传递给编译器并希望修复问题。


推荐阅读