linux - 引导扇区的最终签名是什么?是 0xaa55 还是 0x55aa?
问题描述
在我研究 BIOS 和引导时,我发现 0xaa55 被用作签名来检查 512 字节的引导扇区是否损坏。现在在某些情况下,它被称为 0xaa55 和一些 0x55aa。我很困惑。我也认为这是因为 CPU 的字节顺序。但是字节顺序不应该是这个词。因此是 0000aa55 或 55aa0000(假设是 32 位字)。还是引导扇区本身就具有 16 位字?
解决方案
从历史上看,PC BIOS 的该功能早于 32 位 x86 CPU,而我们所知道的启动过程可以追溯到 16 位 8086。有些元素可能比这更早,但这比我的时代早了一点。
你是对的,混淆是与字节序相关的。512 字节引导扇区的最后一个字节是aa
,它之前的字节是55
. 因此,通常将签名称为55aa
它在引导扇区中按字节显示的顺序。这也是它作为单个字节出现在内存中的顺序 - 当引导扇区加载到 时0000:7c00
,位于 的字节7dff
是aa
。
但是,当在 little-endian x86 上表示为 16 位字时,它是aa55
. 由于这种顺序,通常将块结束签名放在汇编文件中,如下所示:
.word 0xaa55 # this is AT&T syntax
因为它比两个.byte
相反的指令更简单:
.byte 0x55
.byte 0xaa
所以人们有时会以这种方式引用签名。
推荐阅读
- akka - 为什么停止演员会增加 CPU 使用率?
- compiler-errors - 从方法内的模式匹配返回时,在当前范围内找不到关联类型
- css - 如何让 ng-grid 像 domReady 一样适合宽度
- javascript - 当更改类的代码遥不可及时如何触发类更改事件
- php - Symfony 4 包含来自不同目录的另一个项目
- node.js - node-rdkafka 使用 REST API 发布消息
- git - 松散对象对象名称(存储在 .git/objects/18/objectName 中)已损坏
- php - 在 Woocommerce 的客户运输部分下向管理员用户添加其他字段
- docker - Docker设备映射器:找不到存储图像的位置
- javascript - 将月份添加到日期时刻js