В ВинХексе нажимаю: перейти к сектору, ввожу 9318480р(в dec) - попадаю на сектор с превыми байтами EB5290h(т е jump), потом идет сигнатура NTFS - это точно бут-рекорд. А сектор 9318481h вообще с нескольких нулей начинается...
Вот фрагмент бутсектора FAT32 диска, отформатированного из-под WinXP: Code (Text): 000000A4: 668B461C mov eax,[bp][01C] 000000A8: 6683C00C add eax,00C 000000AC: BB0080 mov bx,08000 ;'А ' 000000AF: B90100 mov cx,1 000000B2: E82B00 call 0000000E0 --↓2 000000B5: E94803 jmp 000000400 --↓3 Вот фрагмент бутсектора FAT32 диска, отформатированного из-под Win98: Code (Text): 000000BE: 8B461C mov ax,[bp][01C] 000000C1: 8B561E mov dx,[bp][01E] 000000C4: B90300 mov cx,3 000000C7: 49 dec cx 000000C8: 40 inc ax 000000C9: 7501 jnz 0000000CC --↓1 000000CB: 42 inc dx 000000CC: BB007E 1mov bx,07E00 ;'~ ' 000000CF: E85F00 call 000000131 --↓2 000000D2: 7326 jnc 0000000FA --↓3 В обоих случаях подгружается второй сектор загрузчика, и обращение идёт относительно [dword +1C]. То, что [+1C] на FAT32-томах расширенного раздела - относительное значение, видно любым дисковым редактором (я использую в этих целях hiew). Следовательно, с FAT32-тома в расширенном разделе винду загрузить просто так не удастся. Когда мне очень хотелось таки загрузить DOS с такого раздела, пришлось писать дополнительный код, который собственно загружает бутсектор и меняет в памяти [+1C] на абсолютное значение - тогда работает. Может, там NTFS? Или загрузчик перед бутсектором умный?
Не, с NTFS такая же проблема, там тоже относительно [+1C] адресация идёт, только общий размер загрузчика уже не два сектора, а 16. *задумчиво* у меня XP стоит на расширенном G:, но бутсектор G: вообще не вызывается, поскольку загрузка идёт из c:\ntldr и c:\boot.ini.
FaNt0m А попробуй перед передачей управления сделать Code (Text): mov dword [7C1Ch], 9318480h Ничего не гарантирую, но вдруг что-нибудь да выйдет?
diamond 7C1Ch - это смещение количества скрытых секторов на лог диске. З.Ы. И джамп в начале сектора тогда для кого?
Не, я гружу именно через бут-сектор тома в расширенном разделе. А сам тип расширенного раздела какой, 0Fh?
FaNt0m Не совсем. Это смещение количества скрытых секторов перед логическим диском. Это загрузчик перепрыгивает данные, чтобы не исполнять их как код. Я не предлагаю изменить код, только скорректировать данные для этого кода так, чтобы привести их в соответствие с ожиданиями загрузчика.
Мы же вроде определились, что если и можно что-то запустить, то это 9318481h! Если 9318480h - это EPR, то там в начале наверняка одни нули!
Точно, primary. Тогда всё, что я написал про extended, к делу отношения не имеет. Уточняющий вопрос: всё это происходит на основном, первом жёстком диске?
Там первичный раздел NTFS лежит дальше, чем расширенный! 9318480h - это вообще номер бут-сектора NTFS-раздела!