Хай! решил отдизасмить лоадер хрени, окрыл диск С: в WinHex вырезал нулевой сектор с загрузчиком, сохранил в отдельный бинарник и скормил его любимому debag_у....учитывая что первое слово в дампе это jmp на начало тела загрузчика дал команду U с адресса на который слал jmp..........первые строчек 10-15 есче было читабельно...но потом...чушь какая-то....db какие-то между инструкциями,...INT13 вызывается с 41h в AH, а 41 ф-ции ваще помойму несуществует, ну и в том же духе... Подскажите че нетак сделал, мож кто лоадеры дизасмил, класно если из debug_а, из него как-то поинтереснее, чем из виндозной гадости. Заранее пасиб. P.S. че дизасмил прилагается
лоадер хрени - ntldr, весит 245 кб и лежит отдельным файлом. те первые 512 байт, котороые ты скопировал winhex'ом - boot sector.
К тому же 41h функция прерывания 13h вполне существует - это EDD BIOS (Extended Disk Drive Services). Спецификация есть на www.t13.org Это расширенные функции для накопителей больше 8Гб.
да ссори не лоадер хрени дизасмить хотел а бут сектор именно он мне интересен,...хочу немного с ним поиграть. с INT13 ясненько...пасиб Но остается вопрос че за db появляются между инструкциями при дизасме
Скорее всего это префиксы замены размера адреса/операнда для работы с 32битными адресами/операндами (0x67/0x66). Не уверен, что debug.exe знает о 32 битах и умеет их обрабатывать, поэтому лучше взять что-то по-новее, например, IDA (легко находится на cracklab.ru).
Проблема с db возникает из-за того, что дебаг не понимает инстукции с старшими частями 16-битных регистров, что само по себе очень страшно, например add al,9 - нормально, а add ah,9 - коряво. Насчёт того, как получить исходный текст, используй ИДУ, предварительно настроив смещение на 7с00.
Скорее всего используются 32битные регистры, а дебаг показывает Код (Text): mov eax, 1 как Код (Text): db 66 mov ax, 1 db 00 db 00 Ну и дальше, это все изза того, что один и тот же опкод в разной адресации означает разные команды. B8 02 00 90 90 может означать и MOV EAX, 90900002 и MOV AX, 0002 / NOP / NOP Это раз. Два - там используются команды расширенного алфавита (первый байт опкода 0F), debug их тоже не кушает. поэтому весь листинг после первой такой команды сбивается напрочь:
И в одном месте там есть действительно DB - они там байты экономили. Т.е. выходит что-то типа такого (как пример, точно не помню): Код (Text): db 24h Error: stc И если переход происходит на Error, то CF устанавливается. А если нет, то эта штука превращается в and al,0F9h -> CF сбрасывается. В общем там такой прикол в одном месте был. А вообще возьми IDA, там всё легко разберёш. Если пятую качать много, то можно и поменьше версию. Я то-ли в третьей, то-ли в четвёртой дизасмил. Там только интерфейс консольный - по типу Volkov Commander. А так удобно.