2016-10-11 5 views
1

я столкнулся 0x55AA в 2-х случаях:Что такого особенного в 0x55AA?

  • заключительных 2 байта загрузочного сектора в процессе начальной загрузки наследия содержит 0x55AA.
  • первые 2 байта Option ROM должны быть 0x55AA

Так что особенного 0x55AA?

Бинарная версия 0x55AA is 0101010110101010. Это потому, что он равномерно чередуется с 0 и 1? Но я не вижу, что это сильный критерий.

+1

Возможный дубликат [Почему 55 AA используется в качестве загрузочной подписи на компьютерах IBM?] (Http://stackoverflow.com/questions/11075003/why-55-aa-is-used-as-the-boot- signature-on-ibm-pcs) – Downvoter

+0

На самом деле это 0xAA55 в качестве 16-битного слова, которое на маленькой конечной системе хранится в байтах 0x55 0xAA. –

+0

Он также используется как возвращаемое значение множества модулей perl, найденных в CPAN, которые должны возвращать истинное значение. См. Http://returnvalues.userperl.at/values.html – Aaron

ответ

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 байтов очень маловероятна.

1

0x55AA является «сигнатурным словом». Он используется как маркер «конец сектора» в последних двух байтах 512-байтной загрузочной записи. Это включает MBR, а также расширенные загрузочные записи и в новом MBR защищенных MBR.

Ссылки:

Starting and Ending Cylinder, Head, and Sector Fields

Изображение из Master Boot Record - microsoft.com.

How Basic Disks and Volumes Work - microsoft.com.

+1

Следует указать, что в качестве WORD подпись фактически равна 0xAA55 или как 2 байта 0x55 0xAA –

Смежные вопросы