multboot header 中校验和的用途是什么?

What is the purpose of the checksum in the multboot header?

“校验和”的目的是什么?

“校验和”字段是一个 32 位无符号值,当添加到其他魔法字段(即“魔法”和“标志”)时,其 32 位无符号总和必须为零。

dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start))

目的是验证多重引导 header 实际上是多重引导 header。幻数 0xE85250D6 不足以验证这一点,因为这个幻数可能偶然或设计出现在 non-multiboot 可执行文件中。例如,用于处理多重启动可执行文件的程序很容易在其中的某处包含这个幻数。

它的目的不是检测错误,因为只检查多重引导 header 是否损坏是没有意义的。如果有可能损坏,则需要验证整个可执行文件。