关于0x55AA有什么特别之处?

时间:2016-10-11 07:29:09

标签: operating-system boot firmware

我在两种情况下遇到过0x55AA:

  • 旧版启动过程中最后2个字节的启动扇区包含0x55AA
  • Option ROM的前2个字节必须为0x55AA

那么0x55AA有什么特别之处?

0x55AA的二进制版本为0101010110101010。是因为它是0和1均匀交错?但我不认为这是一个强有力的标准。

2 个答案:

答案 0 :(得分:1)

0x55AA是一个“签名词”。它在512字节引导记录的最后2个字节中用作“扇区结束”标记。这包括MBR及其扩展启动记录以及较新的GPT保护MBR。

参考文献:

Starting and Ending Cylinder, Head, and Sector Fields

来自Master Boot Record - microsoft.com的图片。

How Basic Disks and Volumes Work - microsoft.com

答案 1 :(得分:0)

这种组合没有什么神奇或神秘的东西。实施者需要一种方法来确定设备的第一个扇区是否可引导(引导签名),并且在扇区的最后两个字节中发生的组合是如此不可能,这就是选择它的原因。

同样地,可以发现SMBIOS入口点扫描BIOS中的_SM_签名必须在这样的段边界上;

  Find_SMBIOS:
    push    ds
    push    bx                      ; Preserve essential
    push    si

; Establish DS:BX to point to base of BIOS code

    mov     ax, 0xf000
    mov     ds, ax                  ; Segment where table lives
    xor     bx, bx                  ; Initial pointer
    mov     eax, '_SM_'             ; Scan buffer for this signature

; Loop has maximum of 4096 interations. As table is probably at top of buffer, cycling
; though it backwards saves time. In my test bed, BOCH's 2.6.5 BIOS-bochs-latest it was
; 1,451 interations.

.L0: sub     bx, 16                  ; Bump pointer to previous segment
     jnz     .J0

; Return NULL in AX and set CF. Either AX or flag can be tested on return.

    mov     ax, bx
    stc
    jmp     .Done

; Did we find signature at this page

.J0: cmp     [bx], eax
    jnz     .L0                     ; NZ, keep looking

; Calculate checksum to verify position

    mov     cx, 15
    mov     ax, cx
    mov     si, bx                  ; DS:SI = Table entry point

; Compute checksum on next 15 bytes

.L1: lodsb
    add     ah, al
    loop    .L1

    or      ah, ah
    jnz     .L0                     ; Invalid, try to find another occurence

; As entry point is page aligned, we can do this to determine segment.

    shr     bx, 4
    mov     ax, ds
    add     ax, bx
    clc                             ; NC, found signature

.Done:
    pop     si
    pop     bx                      ; Restore essential
    pop     ds

    ret     

该签名在十六进制转储中很容易识别,并且适合16位寄存器。在这两个标准促成因素的情况下,我不知道,但同样,0x5f4d535f出现在偶数16字节边界的可能性非常小。