首页 > 解决方案 > 引导扇区的最终签名是什么?是 0xaa55 还是 0x55aa?

问题描述

在我研究 BIOS 和引导时,我发现 0xaa55 被用作签名来检查 512 字节的引导扇区是否损坏。现在在某些情况下,它被称为 0xaa55 和一些 0x55aa。我很困惑。我也认为这是因为 CPU 的字节顺序。但是字节顺序不应该是这个词。因此是 0000aa55 或 55aa0000(假设是 32 位字)。还是引导扇区本身就具有 16 位字?

标签: linuxoperating-system

解决方案


从历史上看,PC BIOS 的该功能早于 32 位 x86 CPU,而我们所知道的启动过程可以追溯到 16 位 8086。有些元素可能比这更早,但这比我的时代早了一点。

你是对的,混淆是与字节序相关的。512 字节引导扇区的最后一个字节是aa,它之前的字节是55. 因此,通常将签名称为55aa它在引导扇区中按字节显示的顺序。这也是它作为单个字节出现在内存中的顺序 - 当引导扇区加载到 时0000:7c00,位于 的字节7dffaa

但是,当在 little-endian x86 上表示为 16 位字时,它是aa55. 由于这种顺序,通常将块结束签名放在汇编文件中,如下所示:

.word 0xaa55          # this is AT&T syntax

因为它比两个.byte相反的指令更简单:

.byte 0x55
.byte 0xaa

所以人们有时会以这种方式引用签名。


推荐阅读