1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Перемещение в образе OS, под отладчиком эмулятора BOCHS.

Тема в разделе "WASM.NT.KERNEL", создана пользователем GRAFik, 8 май 2020.

  1. GRAFik

    GRAFik New Member

    Публикаций:
    0
    Регистрация:
    8 май 2020
    Сообщения:
    2
    Всем доброго времени суток.

    Разбираюсь с эмулятором Bochs и немного запутался. Есть образ Win_98 для Bochs. Запускаю его файлом bochs.exe - запускается Windows 98 в которой можно работать. Могу запустить этот образ файлом bochsdbg.exe, поставить бр. поинт в загрузчике где-нибудь в районе 0x7C00 и начать отладку.

    Теперь вопрос:
    Внутри образа Win_98 есть папка ABCD, в которой находится файл Proba.exe (не важно, это может быть и блокнот). Возможно ли с бр. поинта на адресе 0x7C00 в загрузчике, перескачить на бр. поинт файла Proba.exe и продолжить отладку? Если да, то как узнать адрес файла Proba.exe в образе, чтобы поставить на него бр. поинт?

    Т.е. меня интересует насколько свободно можно перемещаться в образе файла Win_98 ( загрузчик - kernel(R0) - User Mode(R3) ). И самое главное, если перемещение возможно, то как найти адрес файла Proba.exe в User Mode и поставить на него BP?
     
    extravert нравится это.
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.368
    Адрес:
    Fryazino
    Аду настрой и будет тебе счастье. А если без неё то
    Я бы открыл образ в WinHex извлёк бы Proba.exe далее открываем его не знаю тем же winHex или Ольке. Находим точку старта. Запоминаем 4 байта Патчим кодом "66 87 db" XCHG BX,BX И всё на magic brakpoint bochsdbg остановится. Далее записываем обратно запомненные 4 байта
     
    extravert нравится это.
  3. extravert

    extravert Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    62
    Pavia, спасибо вам от меня! Вопрос действительно интересный. А я все думал, почему вы не отвечаете или TermoSINteZ? Да и, по-моему, Хошимин должен знать ответ. Потом думаю, сам поэксперементирую и помогу человеку. Ага щас! :) В общем, сделал образ Windows 98, создал там папку и разместил там файл Proba.exe. Причем, первой командой в файле Proba.exe идет именно "66 87 db" XCHG BX,BX. В настройках Боша, естественно, включил реакцию на команду "66 87 db" XCHG BX,BX - и нифига - не реагирует на нее BOCHS. Потом, думаю, может она должна быть 16-битной ("87 db" XCHG BX,BX) и тоже никакой реакции со стороны Боша. Не могу сообразить, где я делаю ошибку?
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.368
    Адрес:
    Fryazino
    extravert, в конфиге пропишите "magic_break: enabled=1"
    Только многозадачность вам не даст нормально отлаживать.
     
  5. extravert

    extravert Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    62
    Pavia, спасибо за то, что откликнулись. Вы уж совсем-то из меня выпускника двух классов церковно-приходской школы не делайте, я же все-таки не в одной стране с Лукашенко живу. :) "magic_break: enabled=1" - это первое, что я прописал перед началом эксперимента. Я даже не знаю, что у меня было но второй раз все проверил, запустил и magic_break сработал. Т.ч. ТС можно смело рекомендовать, чтобы все повторял за нами и все получится.

    А вот еще такой вопрос:
    Я открыл в Hex-редакторе образ с Windows 98 и нашел, допустим, по адресу 0x01C60400 нужное место в коде. Какой командой прописать бр. поинт в BOCHS, чтобы он сработал в этом месте кода? Там же есть брейк поинты виртуальные, линейные и физические. Я пробовал на всех и не срабатывает, может быть глюк какой был и еще раз попробовать?
     
  6. GRAFik

    GRAFik New Member

    Публикаций:
    0
    Регистрация:
    8 май 2020
    Сообщения:
    2
    Pavia, extravert, спасибо за помощь и участие. Извиняюсь за то, что долго не отвечал, был немного занят. С "magic_break: enabled=1" все срабатывает, а варианты с breakpoint-ми (которые линейные, виртуальные и физические) - нет. Но я думаю, что так наверное и должно быть, потому что у нас же код сначала работает в Real Mode, затем в Protect Mode, система адресации, по-моему, меняется и сделать какое-то относительное соответствие адресам, которые у нас в Hex-редакторе - не получится. Ну, Pavia поправит если ошибаюсь.

    А что за ADA? Объясните пожалуйста, если не трудно.

    Здесь тоже, если не трудно, объясните в чем проблема. Хочется получше разобраться в особенностях такой отладки.
     
  7. extravert

    extravert Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    62
    А вопросы ТС достаточно интересные. Неужели никто больше не знает, коль у Pavia эта информация засекречена? Мне, например, про Aда любопытно и почему многозадачность не даст нормально отлаживать? Да и про брейк поинты, если бы кто пояснил немного, был бы благодарен.
     
    Последнее редактирование: 11 май 2020
  8. extravert

    extravert Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    62
    Подниму тему, чтоб не затерялась под натиском каких-то мифических сплойтов, которые в соседних ветках. :)