Кто-нибудь ковырялся в MBR? Как регистр ch приравнивается к 80-ти?

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 22 июл 2024.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Друзья! Вот классическая MBR от Windows XP (прикладываю файл, там удобочитаемо):

    Вот инструкция в строке 00000020:.
    00000020: 386e00 CMP [BP+0x0], CH
    Понятное дело, что ищется активный раздел. Значение какое-то там сравнивается с 80. То есть в регистре ch значение 80.

    Откуда?! Я уж все глаза проглядел, пытаясь отыскать, как оно туда кладётся. (там выше всего 18 строчек код, разобраться нетрудно) Предопределено? Тоже непохоже. Подменяю MBR вот этим кодом, он выведет знак доллара, если ch предопределён как 80, ниче не выводит.

    Код (ASM):
    1. global _start  ; делаем метку метку _start видимой извне
    2.  
    3. section .text  ; объявление секции кода
    4. _start:
    5.    cmp ch, 0x80  
    6.    jne _her
    7.    mov ah, 0xe
    8.    mov al, 0x24  
    9.    int 0x10
    10. _her:
    11.    mov ah,0x0
    12.    int 0x16       ; ждём ввода
    13.  
    14.  
    В общем, спасибо, кто тликнется.
     

    Вложения:

    • mbr.txt
      Размер файла:
      12,7 КБ
      Просмотров:
      180
  2. Prober

    Prober Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    43
    Здесь
    Код (ASM):
    1. 00000015: b9e501  MOV CX, 0x1e5
    2. 00000018: f3a4    REP MOVSB
    3. 0000001a: cb      RETF
    CX обнуляется. CH==0 не мешает правильно найти активный раздел.
     
  3. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    250
    Win7 MBR, компилится FASM'ом, бинарные отличия минимальны (разная кодировка FASM'ом/MASM'ом modrm полей одинаковых по сути инструкций)
    Не за что
     

    Вложения:

    • Win7MBR.asm
      Размер файла:
      6,5 КБ
      Просмотров:
      182
  4. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    да, спасибо, я посмотрел в отладчике, на этой стадии не происходит проверка на равенство 80-ти (может, позже). Просто смотрит, пустое поле или инет.

    Да как вам сказать... Так, у меня есть код:
    Код (ASM):
    1.  MOV DL, [BP+0x0]
    2.    MOV AH, 0x8
    3.    INT 0x13
    А у вас его нет. Сошло бы за придирку, но это ПЕРВОЕ (то бишь важное) по счёту прерывание. которое вызовется, если будет найден ОДИН активный раздел.
    Что из этого? А вот что. В этом вот кусочке коде (см. выше):
    Код (ASM):
    1.  MOV DL, [BP+0x0]
    В регистр DL кладётся число-флаг (0x80 если всё штатно). Ну допустим. Смотрим справочник, что за прерывание такое:
    http://www.ctyme.com/intr/rb-0621.htm
    Код (ASM):
    1. AH = 08h
    2. DL = drive (bit 7 set for hard disk)
    3. ES:DI = 0000h:0000h to guard against BIOS bugs
    А вот тут стоп. Мне. конечно, многое непонятно. Непонятно, как оно может получить информацию об устройстве- каком? Ну это ладно. Но вот какую роль в этом играет флаг активности или неактивности раздела- это реально чё-то не то. Хотим получить информацию об устройстве и указываем, что один из разделов активный (можно подумать, если бы он был неактивным, характеристики устройства поменялись бы).

    ...Честно сказать, я засунул ноздри в эту тему узнать для себя, а как считывание данных в память происходит- интересны и непонятны были некоторые формулировки- идёт считывание из диска в память, а процессор простаивает- как так может быть? А вот так, этим занимается BIOS оказывается. Прерывание а потом работа BIOS-а (прав же я?). Ну и оставшуюся часть загрузчика тоже в память считывается BIOS-ом.
    Так что поднимаемый сейчас мной вопрос побочный, скорее. Но он есть.
     
    Последнее редактирование модератором: 24 июл 2024
  5. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    250
    https://wiki.osdev.org/ATA_read/write_sectors
    --- Сообщение объединено, 24 июл 2024 ---
    По поводу проверки на 0x80 - там проверка на 0x00 и jl через минус который и даст старший бит походу
     
  6. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    203
    amvoz, когда MBR получает управление,
    в регистре DL биос передаёт ему номер диска, который указан как загрузочный "Boot" в BIOS-Setup.
    Далее значение в DL использует уже INT-13h для поиска раздела с ОС на этом диске VBR (Volume Boot Record).
     
    Mikl___ нравится это.
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.801
    что бы не было ляпов типа ES:lol: I = 0000h:0000h используйте тэги [code] или [plain] ― обычный текст. Они отключают обработку BB-кодов внутри тэгов
     
  8. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    нет.
    1) Вот код MBR, который выполняется. Сперва идёт всякая фигня и переписывание себя по другому адресу (0x61b)
    [​IMG]
    2) Потом идёт поиск флага активности. Там два цикла. Сперва ищется раздел с этим флагом (с полем флага, не равным 0). потом ищется, нет ли другого раздела с таким же флагом (с полем флага опять-таки не равным нулю)
    3) Потом прыжок на прерывание int 0x13. Как видно (AH становится равным 08h), будем получать информацию о чём-то там.
    --------------------------------------------------------------
    За всё это время обращение к регистру DL чуть меньше, чем ноль. Этому коду вообще всё равно, чё там. Больше того, я клал в этот регистр разные значения- всё равно, что там вообще будет.
    --------------------------------------------------------------
    Но вот когда будет прерывание int 0x13, оно кладёт в этот регистр значение. Какое? А значение флага, оно 0x80. Ирония заключается в том, что оно положит туда что угодно. Будет 2, положит 2. Будет 6 получит 6. будет 94 положит 94.
    А потом вызовется прерывание int 0x13, чтобы получить информацию об устройстве, 94, прости господи. Ну хорошо, 0x80. И если 0x80 (не устану повторять, что это всего лишь идентификатор, загрузочный раздел или нет) я ещё как-то могу притянуть за уши к информации об устройстве. то дальше оно вдруг превращается в:
    Код (Text):
    1. DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)
    2.  
    3. AH = 08h
    4. DL = drive (bit 7 set for hard disk)
    5. ES:DI = 0000h:0000h to guard against BIOS bugs
    Ну тут конечно, моих знаний не хватает. Так хватало бы. не спрашивал бы. (Ну или BIOS внутри себя повторяет работу MBR- то есть пробегается по таблице разделов, ищет активный раздел, потом ищет головки, цилиндры или чё там есть и их возвращает- только это будет информация о разделе, а не об устройстве. Но это уже фантазирую. Но если это так, я даже готов согласиться, пусть флаг загрузки станет называться drive (bit 7 set for hard disk))
     
  9. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    250
    Я тебе пишу:
    вот у тебя ch =0x00 (очевидно)
    вот CMP [BP+0x0], CH, то есть сравнение байта с нулем
    если тот байт имеет старшим битом 1 (а 0x80 имееет старшим битом 1), то это отрицательное число, то есть оно меньше нуля
    и далее идет jl - перейти если меньше, ну так как 0x80 меньше 0x00 (в силу того, что 0x80 = -128) то переход будет осуществлен если там 0x80
     
  10. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    да это я понял. Я понял, что почему-то 80 оказывается меньше нуля (а также 81 и прочая)- ну там свои заморочки, разбираться надо. В смысле восстанавливать знания.
    ...Я не понимаю, как оно может просить информацию об устройстве (прерывание int 0x13), идентифицируя его флагом активности раздела?
     
  11. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    250
    0x80 меньше нуля, потому что старший бит - это бит знака
    по поводу флага активности раздела - флаг активности раздела это просто бит указывающий, что раздел загрузочный, больше за этим ничего не стоит
     
  12. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    я о том же. То есть прерывание 0x13 говорит bios-у:
    Занавес.
     
  13. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.623
    Адрес:
    Russia
    Скорее всего разделы нумеруются с нуля и ищется загрузочный перебором по порядку, в тривиальном случае это будет 80h в более изощренном 82h
    --- Сообщение объединено, 24 июл 2024 ---
    Мне почему то кажется что там не просто флаг, а номер диска с установленным флагом, или ноль означает диск к которому обращались последний раз
    --- Сообщение объединено, 24 июл 2024 ---
    Можно взять исходники msdos и почитать каменты там все будет описано.
    --- Сообщение объединено, 24 июл 2024 ---
    Не думаю что там будет сильно отличатся от хрюши.
     
  14. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    ...Получатся. меняется флаг, меняется и номер устройства? Договорились.
     
  15. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    203
    Код загрузчика статичный, и чтобы была возможность выбрать загрузочный диск в биос, он принимает аргумент в регистре DL. Вот мой MBR где видно, что после INT-18h значение из DL сохраняется в стеке [BP+00], после чего используется при любом дисковом в/в INT-13h. А насчёт значения 80h в регистре CH, это походу дизассм листинг кривой у тебя - выложи сюда свой MBR в бинарном виде, а не тхт.

    Код (ASM):
    1. File: MBR_.bin
    2. Path: F:\
    3. Size: 512
    4. Type: Binary
    5.  
    6. * Entry Point:
    7.  
    8. * Jump:
    9. 00007D2A(U)
    10.  
    11. 00007C00: 33C0                 xor ax, ax
    12. 00007C02: 8ED0                 mov ss, ax
    13. 00007C04: BC007C               mov sp, 7C00
    14. 00007C07: 8EC0                 mov es, ax
    15. 00007C09: 8ED8                 mov ds, ax
    16. 00007C0B: BE007C               mov si, 7C00
    17. 00007C0E: BF0006               mov di, 0600
    18. 00007C11: B90002               mov cx, 0200
    19. 00007C14: FC                   cld
    20. 00007C15: F3A4                 rep movsb
    21. 00007C17: 50                   push ax
    22. 00007C18: 681C06               push 061C
    23. 00007C1B: CB                   retf
    24.  
    25. 00007C1C: FB                   sti
    26. 00007C1D: B90400               mov cx, 0004
    27. 00007C20: BDBE07               mov bp, 07BE
    28.  
    29. * Jump:
    30. 00007C30(C)
    31.  
    32. 00007C23: 807E0000             cmp byte ptr [bp], 00
    33. 00007C27: 7C0B                 jl  00007C34
    34. 00007C29: 0F850E01             jne 00007D3B
    35. 00007C2D: 83C510               add bp, 0010
    36. 00007C30: E2F1                 loop 00007C23
    37. 00007C32: CD18                 int 18
    38.  
    39. * Jump:
    40. 00007C27(C), 00007CAE(U)
    41.  
    42. 00007C34: 885600               mov [bp], dl
    43. 00007C37: 55                   push bp
    44. 00007C38: C6461105             mov byte ptr [bp+11], 05
    45. 00007C3C: C6461000             mov byte ptr [bp+10], 00
    46. 00007C40: B441                 mov ah, 41 ;'A'
    47. 00007C42: BBAA55               mov bx, 55AA
    48. 00007C45: CD13                 int 13
    49. 00007C47: 5D                   pop bp
    50. 00007C48: 720F                 jb  00007C59
    51. 00007C4A: 81FB55AA             cmp bx, AA55
    52. 00007C4E: 7509                 jne 00007C59
    53. 00007C50: F7C10100             test cx, 0001
    54. 00007C54: 7403                 je  00007C59
    55. 00007C56: FE4610               inc byte ptr [bp+10]
    56.  
    57. * Jump:
    58. 00007C48(C), 00007C4E(C), 00007C54(C), 00007CB9(U)
    59.  
    60. 00007C59: 6660                 pushad
    61. 00007C5B: 807E1000             cmp byte ptr [bp+10], 00
    62. 00007C5F: 7426                 je  00007C87
    63. 00007C61: 666800000000         push 00000000
    64. 00007C67: 66FF7608             push dword ptr [bp+08]
    65. 00007C6B: 680000               push 0000
    66. 00007C6E: 68007C               push 7C00
    67. 00007C71: 680100               push 0001
    68. 00007C74: 681000               push 0010
    69. 00007C77: B442                 mov ah, 42 ;'B'
    70. 00007C79: 8A5600               mov dl, [bp]
    71. 00007C7C: 8BF4                 mov si, sp
    72. 00007C7E: CD13                 int 13
    73. 00007C80: 9F                   lahf
    74. 00007C81: 83C410               add sp, 0010
    75. 00007C84: 9E                   sahf
    76. 00007C85: EB14                 jmp 00007C9B
    77.  
    78. * Jump:
    79. 00007C5F(C)
    80.  
    81. 00007C87: B80102               mov ax, 0201
    82. 00007C8A: BB007C               mov bx, 7C00
    83. 00007C8D: 8A5600               mov dl, [bp]
    84. 00007C90: 8A7601               mov dh, [bp+01]
    85. 00007C93: 8A4E02               mov cl, [bp+02]
    86. 00007C96: 8A6E03               mov ch, [bp+03]
    87. 00007C99: CD13                 int 13
    88.  
    89. * Jump:
    90. 00007C85(U)
    91.  
    92. 00007C9B: 6661                 popad
    93. 00007C9D: 731C                 jnb 00007CBB
    94. 00007C9F: FE4E11               dec byte ptr [bp+11]
    95. 00007CA2: 750C                 jne 00007CB0
    96. 00007CA4: 807E0080             cmp byte ptr [bp], 80
    97. 00007CA8: 0F848A00             je  00007D36
    98. 00007CAC: B280                 mov dl, 80
    99. 00007CAE: EB84                 jmp 00007C34
    100.  
    101. * Jump:
    102. 00007CA2(C)
    103.  
    104. 00007CB0: 55                   push bp
    105. 00007CB1: 32E4                 xor ah, ah
    106. 00007CB3: 8A5600               mov dl, [bp]
    107. 00007CB6: CD13                 int 13
    108. 00007CB8: 5D                   pop bp
    109. 00007CB9: EB9E                 jmp 00007C59
    110.  
    111. * Jump:
    112. 00007C9D(C)
    113.  
    114. 00007CBB: 813EFE7D55AA         cmp word ptr [7DFE], AA55
    115. 00007CC1: 756E                 jne 00007D31
    116. 00007CC3: FF7600               push word ptr [bp]
    117. 00007CC6: E88D00               call 00007D56
    118. 00007CC9: 7517                 jne 00007CE2
    119. 00007CCB: FA                   cli
    120. 00007CCC: B0D1                 mov al, D1
    121. 00007CCE: E664                 out 64, al
    122. 00007CD0: E88300               call 00007D56
    123. 00007CD3: B0DF                 mov al, DF
    124. 00007CD5: E660                 out 60, al
    125. 00007CD7: E87C00               call 00007D56
    126. 00007CDA: B0FF                 mov al, FF
    127. 00007CDC: E664                 out 64, al
    128. 00007CDE: E87500               call 00007D56
    129. 00007CE1: FB                   sti
    130.  
    131. * Jump:
    132. 00007CC9(C)
    133.  
    134. 00007CE2: B800BB               mov ax, BB00
    135. 00007CE5: CD1A                 int 1A
    136. 00007CE7: 6623C0               and eax, eax
    137. 00007CEA: 753B                 jne 00007D27
    138. 00007CEC: 6681FB54435041       cmp ebx, 41504354
    139. 00007CF3: 7532                 jne 00007D27
    140. 00007CF5: 81F90201             cmp cx, 0102
    141. 00007CF9: 722C                 jb  00007D27
    142. 00007CFB: 666807BB0000         push 0000BB07
    143. 00007D01: 666800020000         push 00000200
    144. 00007D07: 666808000000         push 00000008
    145. 00007D0D: 6653                 push ebx
    146. 00007D0F: 6653                 push ebx
    147. 00007D11: 6655                 push ebp
    148. 00007D13: 666800000000         push 00000000
    149. 00007D19: 6668007C0000         push 00007C00
    150. 00007D1F: 6661                 popad
    151. 00007D21: 680000               push 0000
    152. 00007D24: 07                   pop es
    153. 00007D25: CD1A                 int 1A
    154.  
    155. * Jump:
    156. 00007CEA(C), 00007CF3(C), 00007CF9(C)
    157.  
    158. 00007D27: 5A                   pop dx
    159. 00007D28: 32F6                 xor dh, dh
    160. 00007D2A: EA007C0000           jmp 0000:00007C00 (00007C00)
    161. 00007D2F: CD18                 int 18
    162.  
    163. * Jump:
    164. 00007CC1(C)
    165.  
    166. 00007D31: A0B707               mov al, [07B7]
    167. 00007D34: EB08                 jmp 00007D3E
    168.  
    169. * Jump:
    170. 00007CA8(C)
    171.  
    172. 00007D36: A0B607               mov al, [07B6]
    173. 00007D39: EB03                 jmp 00007D3E
    174.  
    175. * Jump:
    176. 00007C29(C)
    177.  
    178. 00007D3B: A0B507               mov al, [07B5]
    179.  
    180. * Jump:
    181. 00007D34(U), 00007D39(U)
    182.  
    183. 00007D3E: 32E4                 xor ah, ah
    184. 00007D40: 050007               add ax, 0700
    185. 00007D43: 8BF0                 mov si, ax
    186.  
    187. * Jump:
    188. 00007D51(U)
    189.  
    190. 00007D45: AC                   lodsb
    191. 00007D46: 3C00                 cmp al, 00
    192. 00007D48: 7409                 je  00007D53
    193. 00007D4A: BB0700               mov bx, 0007
    194. 00007D4D: B40E                 mov ah, 0E
    195. 00007D4F: CD10                 int 10
    196. 00007D51: EBF2                 jmp 00007D45
    197.  
    198. * Jump:
    199. 00007D48(C), 00007D54(U)
    200.  
    201. 00007D53: F4                   hlt
    202. 00007D54: EBFD                 jmp 00007D53
    203.  
    204. * Call:
    205. 00007CC6, 00007CD0, 00007CD7, 00007CDE
    206.  
    207. 00007D56: 2BC9                 sub cx, cx
    208.  
    209. * Jump:
    210. 00007D5E(C)
    211.  
    212. 00007D58: E464                 in al, 64
    213. 00007D5A: EB00                 jmp 00007D5C
    214.  
    215. * Jump:
    216. 00007D5A(U)
    217.  
    218. 00007D5C: 2402                 and al, 02
    219. 00007D5E: E0F8                 loopnz 00007D58
    220. 00007D60: 2402                 and al, 02
    221. 00007D62: C3                   ret
    222.  
    223. 00007D63: 49                   dec cx
    224. 00007D64: 6E                   outsb
    225. 00007D65: 7661                 jbe 00007DC8
    226. 00007D67: 6C                   insb
    227. 00007D68: 6964207061           imul sp, word ptr [si+20], 6170
    228. 00007D6D: 7274                 jb  00007DE3
    229. 00007D6F: 6974696F6E           imul si, word ptr [si+69], 6E6F
    230. 00007D74: 207461               and [si+61], dh
    231. 00007D77: 626C65               bound bp, [si+65]
    232. 00007D7A: 004572               add [di+72], al
    233. 00007D7D: 726F                 jb  00007DEE
    234. 00007D7F: 7220                 jb  00007DA1
    235. 00007D81: 6C                   insb
    236. 00007D82: 6F                   outsw
    237. 00007D83: 61                   popa
    238. 00007D84: 64696E67206F         imul bp, word ptr fs:[bp+67], 6F20
    239. 00007D8A: 7065                 jo  00007DF1
    240. 00007D8C: 7261                 jb  00007DEF
    241. 00007D8E: 7469                 je  00007DF9
    242. 00007D90: 6E                   outsb
    243. 00007D91: 67207379             and [ebx+79], dh
    244. 00007D95: 7374                 jnb 00007E0B
    245. 00007D97: 656D                 insw
    246. 00007D99: 004D69               add [di+69], cl
    247. 00007D9C: 7373                 jnb 00007E11
    248. 00007D9E: 696E67206F           imul bp, word ptr [bp+67], 6F20
    249.  
    250. * Jump:
    251. 00007D7F(C)
    252.  
    253. 00007DA1: 206F70               and [bx+70], ch
    254. 00007DA4: 657261               jb  00007E08
    255. 00007DA7: 7469                 je  00007E12
    256. 00007DA9: 6E                   outsb
    257. 00007DAA: 67207379             and [ebx+79], dh
    258. 00007DAE: 7374                 jnb 00007E24
    259. 00007DB0: 656D                 insw
    260. 00007DB2: 0000                 add [bx+si], al
    261. 00007DB4: 00637B               add [bp+di+7B], ah
    262. 00007DB7: 9A89338A33           call 338A:00003389 (00036C29)
    263. 00007DBC: 0000                 add [bx+si], al
    264. 00007DBE: 802021               and byte ptr [bx+si], 21
    265. 00007DC1: 0007                 add [bx], al
    266. 00007DC3: DF13                 fist word ptr [bp+di]
    267. 00007DC5: 0C00                 or al, 00
    268. 00007DC7: 0800                 or [bx+si], al
    269.  
    270. * Jump:
    271. 00007D65(C)
    272.  
    273. 00007DC8: 0000                 add [bx+si], al
    274. 00007DCA: 0020                 add [bx+si], ah
    275. 00007DCC: 0300                 add ax, [bx+si]
    276. 00007DCE: 00DF                 add bh, bl
    277. 00007DD0: 140C                 adc al, 0C
    278. 00007DD2: 07                   pop es
    279. 00007DD3: FE                  
    280. 00007DD4: FF                  
    281. 00007DD5: FF00                 inc word ptr [bx+si]
    282. 00007DD7: 2803                 sub [bp+di], al
    283. 00007DD9: 0000                 add [bx+si], al
    284. 00007DDB: E04F                 loopnz 00007E2C
    285. 00007DDD: 07                   pop es
    286. 00007DDE: 00FE                 add dh, bh
    287. 00007DE0: FF                  
    288. 00007DE1: FF07                 inc word ptr [bx]
    289.  
    290. * Jump:
    291. 00007D6D(C)
    292.  
    293. 00007DE3: FE                  
    294. 00007DE4: FF                  
    295. 00007DE5: FF00                 inc word ptr [bx+si]
    296. 00007DE7: 085307               or [bp+di+07], dl
    297. 00007DEA: 00884E0B             add [bx+si+0B4E], cl
    298.  
    299. * Jump:
    300. 00007D7D(C)
    301.  
    302. 00007DEE: 0000                 add [bx+si], al
    303.  
    304. * Jump:
    305. 00007D8C(C)
    306.  
    307. 00007DEF: 0000                 add [bx+si], al
    308.  
    309. * Jump:
    310. 00007D8A(C)
    311.  
    312. 00007DF1: 0000                 add [bx+si], al
    313. 00007DF3: 0000                 add [bx+si], al
    314. 00007DF5: 0000                 add [bx+si], al
    315. 00007DF7: 0000                 add [bx+si], al
    316.  
    317. * Jump:
    318. 00007D8E(C)
    319.  
    320. 00007DF9: 0000                 add [bx+si], al
    321. 00007DFB: 0000                 add [bx+si], al
    322. 00007DFD: 0055AA               add [di-56], dl
    323.  
     
  16. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    у меня другой MBR. Ты могу бы убедиться в этом, посмотрев на прилагаемые картинки (но почему-то они не очень хорошего качества получились). Если чё, я дизассемблирую тремя инструментами- результат везде одинаковый. И да, у меня именно что к первому прерыванию int 0X13 нет ни одного обращение к регистру DL (повторяюсь). Только перед самым первым прерыванием int 0X13 в DL кладётся значение флага... А дальше я уже удивлялся тыщу раз. Впрочем, соловья баснями не кормят, вот бинарник.
     

    Вложения:

    • mbr.bin.zip
      Размер файла:
      541 байт
      Просмотров:
      163
    Последнее редактирование: 25 июл 2024
  17. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    203
    судя по таблице разделов это мбр виртуального диска чтоли?
    тогда 80h будет совпадать как с номером hdd(0), так и с бут-флагом раздела.
     
  18. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    да но MBR-то не изменяется, согласитесь, виртуальная машина или нет. И на реальной машине тоже будет ровно такой же код и ровно так же в регистр DL ничего положено не будет. И точно так же перед самым вызовом 0x13 в него будет положен флаг 0x80 и я задам тот же вопрос- как можно идентифицировать устройство по тому, что флаг одного из разделов поднят?
     
  19. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    203
    у вм нет своего биоса, и они всегда грузятся с диска(0) = 80h.
    поэтому код загрузчика будет отличаться, что легко проверить.
    --- Сообщение объединено, 25 июл 2024 ---
    установи на машину BOCHS - у него есть свой дебагер, который может отлаживать загрузчик из мбр.
     
  20. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    На счёт отличаться- вы просто так ляпнули предполагаете или знаете?
    ...Ну, раз легко проверить, давайте проверим. У меня сейчас пока нет возможности установить XP на реальную машину, но если чё- вот мой MBR. Побайтно тык скыть равен.
    https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm
    Вопросы всё те же самые остались, повторять не буду.