1. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.

DOSBox Debugger Helper

Тема в разделе "Мастерская", создана пользователем iunnamed, 13 мар 2014.

  1. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.202
    DOSBox Debugger Helper v0.5
    (c) iunnamed 2014-2018
    http://www.Old-Games.ru/

    http://www.old-games.ru/forum/showthread.php?t=61441

    DOSBoxDH.exe

    Данная программа является GUI-обёрткой для отладчика DOSBox Debugger, которая добавляет и расширяет его функционал, позволяя существенно сэкономить силы и сократить время потраченное на отладку.
    Функционала DOSBox Debugger зачастую более чем достаточно чтобы быстро что-то поглядеть, поправить или изменить, проблема только в удобстве, которую призвана решить данная программа.


    I. Установка

    1) Скачиваем, устанавливаем и настраиваем DOSBox 0.74.2.0.
    2) Скачиваем и кидаем в папку к DOSBox упомянутый отладчик dosbox-74-2-debug.exe.
    ВНИМАНИЕ: КОРРЕКТНАЯ работа с другими версиями, отличными от указанной, НЕ гарантируется - часть функционала либо отвалится, либо будет криво работать (см. комментарии в файле "DOSBoxDH.ini").
    3) Рядом с отладчиком складываем файл "dosbox.conf" со стандартными настройками DOSBox, где секция "[autoexec]" обязательно должна заканчиваться следующими строками:
    где вместо "F:\MyGames\Old Games" - указываем путь до папки с играми, вместо "GameName" вписываем папку нужной игры, а вместо "game.exe" имя исполняемого файла, который необходимо отладить.
    С относительными путями, типа "mount c: dosgames" программа также работает.
    4) Запускаем dosbox-74-2-debug.exe.
    5) Запускаем DOSBoxDH.exe, где последовательно жмём "Attach", затем "Restart".
    Вторую кнопку можно не нажимать, если отладчик только что запущен, но тогда, во-первых, не будут работать IntCDNoExit и OllyDbgKeys, а, во-вторых, нужно будет вручную щёлкнуть по полю в правом углу (см. ниже) для инициализации начальных значений.


    II. Работа и основные возможности

    Центральная часть.
    Главное поле для ввода (слева от кнопок "OK" и "C") служит для передачи команд отладчику.
    Клавиши управления в этом поле:
    Enter - равносильно нажатию кнопки "OK" - команда отправляется в отладчик, т.е. имитирует набор команды в отладчике и нажатию там Enter (т.е. команды выполнилась).
    Все набранные команды (если они не повторяются) автоматически добавляются в список команд снизу.
    Для удобства команды можно комментировать (при большом количестве breakpoint это здорово экономит время) - всё что идёт после символа ";" считается за комментарий и отрезается при отправке команды отладчику.
    Esc - равносильно нажатию кнопки "C" - очищает поле для ввода.
    Ctrl+Enter - позволяет заменить выбранную в списке команду на то, что сейчас есть в поле ввода.
    Клавиши вверх и вниз - позволяют выбрать нужную команду в списке доступных.
    F3 - вставить команду из списка доступных в поле ввода.
    F4 - переключиться на окно отладчика.
    Кнопка "/\" перемещает выделенную команду вверх в списке команд.
    Кнопка "\/" перемещает выделенную команду вниз в списке команд.
    Кнопка "X" удаляет выделенную команду из списка команд.

    Правая часть.
    Кнопка "Attach" - присоединиться к запущенному процессу отладчика DOSBox Debugger. Повторное нажатие отцепляется.
    При закрытии программы она также отцепляется от отладчика автоматически.
    Кнопка "Restart" - позволяет перезапустить DOSBox Debugger (сразу интегрируется в программу).
    Поле с "<click!>" или числом - это очень полезная штука - текущее смещение из CS:IP преобразованное во смещение исполняемого файла на диске - теперь не нужно выписывать последовательность байт и искать это место, чтобы внести изменения.
    Данная возможность НЕ будет работать корректно в следующих случаях:
    а) Исполняемый файл упакован - обязательно распакуйте его перед отладкой.
    б) Текущий код выполняется в оверлее.
    в) Используется DOSBox Debugger отличный от версии 0.74.2.0 указанной выше.
    г) Отладка уже происходила какое-то время, после чего к отладчику присоединились через кнопку "Attach".
    Поясняю: чтобы эта штука работала корректно, необходимо начальное значение регистра ES при старте программы (ещё когда ни одна инструкция не была выполнена и CS:IP стоит на точке входа), плюс нужно слово из заголовка exe-файла (для com-файла не надо, но для exe - нужно). Слово это берётся через адский хак (об этом ниже), так что НАСТОЯТЕЛЬНО рекомендуется нажимать "Restart", чтобы эти два поля инициализировались верно.
    д) Это поле НЕ обновляется в реальном времени, так что для получения текущего значение нужно щёлкнуть по нему мышкой.
    Текстовое поле сбоку - для заметок, чтобы не держать ещё и открытое окно с "Блокнотом".

    Левая часть.
    Кнопки со всякими часто используемыми командами со всплывающими подсказками-шпаргалками об использовании.
    При нажатии добавляются спереди к тому, что уже написано в поле для команд (к примеру, если там уже адрес набран).
    Далее идёт список под которым две кнопки.
    Кнопка "VGet" - сохраняет текущий список векторов прерываний.
    Кнопка "VDif" - заполняет упомянутый список адресами тех прерываний, которые изменились по сравнению со списком сохранённым ранее через "VGet".

    При выходе программа сохраняет два файла:
    "DOSBoxDH.exe_list.txt" - набранные команды из списка;
    "DOSBoxDH.exe_memo.txt" - заметки в текстовом поле.
    Оба файла, при их наличии в одной папке с программой, автоматически загружаются при запуске.
    Если не нужны - переименовываем или удаляем.
    Оба файла перед запуском программы можно редактировать удаляя лишнее, добавляя нужное.
    Делать это во время работы программы не стоит, ибо при выходе она их перезапишет.


    III. Технические подробности
    Программа написана с использованием суровой Чёрной Магии, а значит использует некоторое количество слабодокументируемых, документируемых кем попало и совсем недокументируемых функций Windows.
    Помимо этого используется хак с чтением памяти DOSBox, чтобы вытащить оттуда имя последнего (подчёркиваю - последнего, поэтому очень важно жать "Restart", чтобы он был первым) открытого файла, откуда из заголовка и читается необходимое значение.
    При перезапуске "Restart" текущей папкой для CreateProcess() будет являться та, в которой лежал отладчик, так что и "dosbox.conf" (см. пп.3) должен быть там же.
    Код толстый, потому что Delphi и VCL - особенно корпеть над ним времени не было.
    Программа опробована и работает под управлением Windows XP SP3 и Windows 7 x64 - рекомендации лучших собаководов прилагаются.

    Сия утилита писалась для внутреннего использования, может, кому-то ещё пригодится.

    2018.09.04: version 0.5
    - исправлена отправка текста в консоль отладчика
    - изменён формат версий в DOSBoxDH.ini для поддержки 0.74.2
    - добавлена поддержка версии 0.74.2 от 2018.08.31 (в ini файле)
    - новый параметр IntCDNoExit в DOSBoxDH.ini - отключает выход из DOSBox при вызове прерывания 0xCD ("Call to interrupt 0xCD this is BAD")
    для работы этой опции DOSBox обязательно нужно перезапустить ("Restart")
    если эта опция не нужна, то отключается простым добавлением ";" перед именем параметра
    - поддержка горячих ключей как в OllyDbg / x64dbg через опцию OllyDbgKeys (список ниже статический, не меняется):
    F5, F10, F11 -> F1 (nothing)
    F9 -> F5 (run/execute)
    F2 -> F9 (set/remove breakpoint)
    F8 -> F10 (step over)
    F7 -> F11 (step into)
    опция не будет работать в Windows 98, потому что там не работает VirtualAllocEx()
    для работы этой опции DOSBox обязательно нужно перезапустить ("Restart")
    если эта опция не нужна, то отключается простым добавлением ";" перед именем параметра

    2016.02.09: version 0.4
    - буфер обмена больше не уничтожается и не затрагивается (теперь через WriteConsoleInput() текст отправляется в отладчик)
    - кнопки "VGet" и "VDif", а также список перехваченных прерываний неверно изменяли положение и размер при разворачивании окна
    - добавлены кнопки для перемещения команд в списке вверх "/\", вниз "\/", а также удаления "X", чтобы не ковыряться в "DOSBoxDH.exe_list.txt" и не перезапускать программу
    - поправлено изменение размера формы при "Attach" в оконном режиме
    - кнопка "X" переименована в "C", чтобы не путаться с кнопкой удаления команды из списка

    2015.05.12: version 0.3
    - добавлены кнопки "VGet" и "VDif" - первая сохраняет таблицу векторов, вторая показывает какие из них успели поменяться после сохранения, а также выводит их в список в виде адреса и номера, при двойном щелчке на которые можно сразу подставить их в поле для ввода - эта штука помогает быстро разобраться какие прерывания были перехвачены и где находится код перехватчиков
    - хаки с чтением памяти DOSBox вынесены в DOSBoxDH.ini файл, что должно, по идее, дать возможность отвязаться от dosbox-74-debug.exe и прикрутить к другим версиям, при этом есть возможность работать сразу с несколькими различными версиями DOSBox - формат у секций должен быть "DOSBoxDebug-СтаршаяВерсия-МладшаяВерсия"
    - добавлено автоцентрирование и подгонка по высоте при "Attach", так что запускать в разрешении меньше чем 1024x768 не рекомендуется

    2014.04.20: version 0.2
    - во-первых, поправлено получение смещения, а во-вторых, программа теперь быстрее грузится после "Restart"
    - теперь поле со смещением также обновляется по щелчку мышкой, а не только при получении фокуса

    2014.03.13: version 0.1
    - первая публичная версия
     

    Вложения:

    • DOSBoxDH.png
      DOSBoxDH.png
      Размер файла:
      11,4 КБ
      Просмотров:
      944
    • DOSBoxDH.zip
      Размер файла:
      195,1 КБ
      Просмотров:
      118
    Последнее редактирование: 3 сен 2018
    bvedargh, AndyFox, Sharp_ey и 17 другим нравится это.
  2.  
  3. Tigoro

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    1.866
    Под wine 1.4 запускается (и выше тем более, наверное). Но попробовать не удалось - сам отладчик dosbox 0.74 не работает просто, падает при загрузке.
     
    Val07og и iunnamed нравится это.
  4. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.202
    Поправлена пара мелких, но сильно досаждающих вещей.
    Первое сообщение обновлено.

    2014.04.20: version 0.2
    - во-первых, поправлено получение смещения, а во-вторых, программа теперь быстрее грузится после "Restart"
    - теперь поле со смещением также обновляется по щелчку мышкой, а не только при получении фокуса
     
    007007, Tigoro, Val07og и 4 другим нравится это.
  5. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.202
    Новая версия.
    Первое сообщение обновлено.

    2015.05.12: version 0.3
    - добавлены кнопки "VGet" и "VDif" - первая сохраняет таблицу векторов, вторая показывает какие из них успели поменяться после сохранения, а также выводит их в список в виде адреса и номера, при двойном щелчке на которые можно сразу подставить их в поле для ввода - эта штука помогает быстро разобраться какие прерывания были перехвачены и где находится код перехватчиков
    - хаки с чтением памяти DOSBox вынесены в DOSBoxDH.ini файл, что должно, по идее, дать возможность отвязаться от dosbox-74-debug.exe и прикрутить к другим версиям, при этом есть возможность работать сразу с несколькими различными версиями DOSBox - формат у секций должен быть "DOSBoxDebug-СтаршаяВерсия-МладшаяВерсия"
    - добавлено автоцентрирование и подгонка по высоте при "Attach", так что запускать в разрешении меньше чем 1024x768 не рекомендуется
     
    007007, Corak, AxXxB и 4 другим нравится это.
  6. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.202
    Новая версия.
    Первое сообщение обновлено.

    2016.02.09: version 0.4
    - буфер обмена больше не уничтожается и не затрагивается (теперь через WriteConsoleInput() текст отправляется в отладчик)
    - кнопки "VGet" и "VDif", а также список перехваченых прерываний неверно изменяли положение и размер при разворачивании окна
    - добавлены кнопки для перемещения команд в списке вверх "/\", вниз "\/", а также удаления "X", чтобы не ковыряться в "DOSBoxDH.exe_list.txt" и не перезапускать программу
    - поправлено изменение размера формы при "Attach" в оконном режиме
    - кнопка "X" переименована в "C", чтобы не путаться с кнопкой удаления команды из списка
     
    Tigoro, Steel Rat, kreol и 2 другим нравится это.
  7. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    628
    я смотрю, данная тема особо никого не интересует,, но все-таки попробую спросить :)
    Все началось с того, что мне понадобилось узнать значение некой переменной, которая в IDA обозначается как unknown и чему равно такая переменная даже догадаться нельзя (судя по тому, что декомпиленный код все-таки не работает)
    Нашел в dosbox debuggere нужные мне методы, ставлю туда breakpointы а они не срабатывают, почему?

    Далее просто решил открыть меню в игре и остановить программу...в дебаггере нажимаю на F11 и вижу что код исполняется только в одном методе, метод похож на отрисовку...но меню состоит не только из методов отрисовки, там есть логика...видимо с моими BP происходит что-то подобное...что я делаю не так?

    ..может есть еще какой-нибудь способ определить значение неизвестной переменной? Помогите :)
     
    Последнее редактирование: 20 сен 2016
  8. ZaRR

    ZaRR

    Регистрация:
    18 ноя 2015
    Сообщения:
    1.064
    Да на самом деле очень даже здорово. Но я пока ещё даже не научился обычные консольные игры дебагить.. главное обычные win получается, а эти нет))
     
  9. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    628
    ну в windows и у меня получается, там все легко,да и в IDA дебаггер для винды есть - проблем вообще никаких...
    Раз breakpointы не работают, решил попробовать радикальные меры - прерывать метод сраз после интересующей меня переменной командой ret и пробую запись этой переменной в какую-нибудь ячейку известной памяти...но ничего не получилось....вернее память не меняется, пока что очередной облом
     
  10. ZaRR

    ZaRR

    Регистрация:
    18 ноя 2015
    Сообщения:
    1.064
    @M210, а Cheat Engine'ом не пробовал? Там очень много полезных штучек. Ещё есть современный x64dbg.
     
  11. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    628
    Я с cheat enginом и работаю, регистры процессора он не увидит :) а x64dbg не смотрел, посмотрю, может чего и получится, спасибо)
     
    ZaRR нравится это.
  12. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    628
    Попробовал x64dbg, он досовые программы молча не открывает, и не говорит в чем причина....ну видимо причина в том, что дос :)

    P.S. когда качал прогу, думал, че это она такая большая 30мб....а потом при распаковке случайно заметил библиотеки QT...и сразу все стало понятно :D

    Но вердикт в том, что прога не подошла. Буду дальше смотреть, почему мой код не может записать данные в структуру памяти
     
  13. ZaRR

    ZaRR

    Регистрация:
    18 ноя 2015
    Сообщения:
    1.064
    @M210, будем надеяться, что плагин какой на него напишит, чтобы в досбоксе дебажить)
     
  14. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.202
    Новая версия.
    Первое сообщение обновлено.

    2018.09.04: version 0.5
    - исправлена отправка текста в консоль отладчика
    - изменён формат версий в DOSBoxDH.ini для поддержки 0.74.2
    - добавлена поддержка версии 0.74.2 от 2018.08.31 (в ini файле)
    - новый параметр IntCDNoExit в DOSBoxDH.ini - отключает выход из DOSBox при вызове прерывания 0xCD ("Call to interrupt 0xCD this is BAD")
    для работы этой опции DOSBox обязательно нужно перезапустить ("Restart")
    если эта опция не нужна, то отключается простым добавлением ";" перед именем параметра
    - поддержка горячих ключей как в OllyDbg / x64dbg через опцию OllyDbgKeys (список ниже статический, не меняется):
    F5, F10, F11 -> F1 (nothing)
    F9 -> F5 (run/execute)
    F2 -> F9 (set/remove breakpoint)
    F8 -> F10 (step over)
    F7 -> F11 (step into)
    опция не будет работать в Windows 98, потому что там не работает VirtualAllocEx()
    для работы этой опции DOSBox обязательно нужно перезапустить ("Restart")
    если эта опция не нужна, то отключается простым добавлением ";" перед именем параметра

    Неделю назад вышел DOSBox Debugger 0.74.2 - первая официальная сборка аж с 2011 года!
    Обновляться обязательно, не только потому что это новая версия, но и потому что наконец-то, исправили ошибку прошлой Debug версии за 2011 год, которая при сохранении регистров (sub_4D9100 / dos_execute.cpp / SaveRegisters) разрушала отлаживаемую программу уничтожением 16-ти байт. Приходилось после падения искать где программа упала, сравнивать с тем что на диске и восстанавливать код назад командой SM.
     
    Последнее редактирование: 3 сен 2018
    jack7277, Tigoro, Dimouse и ещё 1-му нравится это.
  15. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.202
    Для 0.74-3 (добавить в конец DOSBoxDH.ini файла из архива в первом сообщении):
    Код:
    [DOSBoxDebug-0-74-3-0]
    PtrMemStart = 00B786D0
    BufLastFile = 01E276E8
    OllyDbgKeys = 004AE729
    IntCDNoExit = 00411A4C
     
    Gamerun и Dimouse нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление