Отключение автоторможение в автосимуляторе под DOS

Тема в разделе "WASM.RESEARCH", создана пользователем Llirik, 14 авг 2018.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    Есть автосимулятор формулы-1 для ДОС под названием "Power F1". Когда играешь в одиночном режиме, автоторможение выключается/включается клавишей F4: на экране появляется на секунду соответствующая надпись "AutoBrake On или Off" и это состояние сохраняется где-то в файле Prefs.set, но в режиме SplitScreen клавиша F4 не действует и соответственно автоторможение у второго игрока никак не отключить. Я в программе Hiew нашёл нужную строку в файле F1.exe, а вот в IDA в этом файле таких строк вообще почему-то не оказалось. Я под ДОС никогда не программировал и не знаю, что дальше надо делать. Подскажите, пожалуйста.
    Файл F1.exe прилагаю. Если кто пропатчит его могу заплатить, только потом расскажите мне, как это сделали. Хочу понять как это делаеться
     

    Вложения:

    • F1.zip
      Размер файла:
      399 КБ
      Просмотров:
      11
  2. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    В иде не можешь найти потому что видимо как 16битное приложение загружаешь, оно 32 бита. Строчки, которые ты нашел, вроде как выводят параметры в лог, сами эти параметры функции указателем через edx передаются. Откуда оно вызывается ида с наскока не знает. Поставить бы туда бряк на вход в отладчике и посмотреть откуда что берется, но ни досом ни отладчиком под него не располагаю.
     
  3. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    573
    Адрес:
    Russia
  4. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    Стоковая ида 6.8 и так LE знает
     
  5. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    f13nd, да) загружал, как 16битное приложение) спасибо. ни досом ни отладчиком под него тоже не располагаю. Запускаю дос-игры через D-Fend Reloaded (графическая оболочка эмулятора DOSBox)
     
  6. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    В таком случае отладчиком будет dosbox-debug https://www.old-games.ru/forum/threads/dosbox-debugger-helper.61441/
    Берешь файл dosbox.conf, вписываешь в секцию autoexec:
    Код (Text):
    1. [autoexec]
    2. mount c: "E:\"
    3. c:
    4. cd 123
    5. debug F1.exe
    Где E:\123 папка с игрой. А потом развлекаешься: F5-run, F9-set breakpoint, F10-step into, F11-step over, bplist-список бряков (при постановке оно никак не отображается). Полный список команд https://www.vogons.org/viewtopic.php?t=3944 Игра у меня не запускается без ресурсов.
     
    Llirik и _edge нравится это.
  7. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    f13nd, большое спасибо за информацию! Правда я с отладчиками ещё никогда не работал, кроме встроенного в RAD Studio), но завтра попробую разобраться. А полностью игра вот:
     

    Вложения:

    • PowerF1.7z
      Размер файла:
      10,9 МБ
      Просмотров:
      8
  8. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    Отладчик я установил, только пока не разобрался, как в нём работать) Теперь вопрос: на что мне ставить breakpoint, если я хочу узнать по какому адресу находится переменная, которая по умолчанию включает автоторможение?
     
  9. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    - Заменяешь файл C:\Program Files (x86)\D-Fend Reloaded\DOSBox\DOSBOX.EXE на скачанный выше dosbox-74-debug.exe
    - При запущенной d-fend'ом игре идешь в папку c:\Users\<user>\AppData\Local\Temp\, забираешь там DOSBOX.CONF
    - Заменяешь в найденном DOSBOX.CONF "F1.exe" на "debug F1.exe"
    - Создаешь bat-файл такого содержания:
    Код (Text):
    1. "C:\Program Files (x86)\D-Fend Reloaded\DOSBox\DOSBOX.EXE" -CONF "E:\123\DOSBOX.CONF" -NOCONSOLE
    - Запускаешь с него
    - Вводишь bp 43B40 и bp 0x43B40 (на всякий случай), F5
    - И блин пытаешься действиями в игре вызвать исполнение этой функции (у меня не получилось, f4 давил как умалишенный, никаких сообщений не было). Скорей всего искать придется не по строчке, ну или из меня плохой пилот.
     
  10. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    f13nd, отладчик я установил по-другому) но не суть важно) Вы в опциях игры отключили режим SplitScreen? Я попробую поработать с отладчиком вечером
     
  11. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    Нет. Но в любом случае эта функция - printf'ы параметров в файл, на экран она выводится по-другому. Возможно как в большинстве игр ее логика в скриптах в ресурсах.
     
  12. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    Ввёл. Надпись показывается, но бряки не срабатывают
     
  13. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    А как в отладчике найти нужные строки в сегменте данных? И почему код в нём 16-битный, а не 32-битный?
     
  14. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    В таком отладчике ты ничего не найдешь. Максимум сдампить MEMDUMPBIN'ом и в нем искать. Но совсем необязательно, чтобы строка на экране была именно строкой, это тупо спрайт может быть, картинка.
     
  15. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    А что же мне тогда дальше делать? Строки, что выводятся на экран есть в Иде
     
    Последнее редактирование: 17 авг 2018
  16. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    Искать эту строку в ресурсах. Там половина файлов текстовые, LBM и BBM - картинки (xnview открывает, в них шрифты хранятся, у BBM ширина картинки в пикселях определяется неверно), BZP и LZP - очевидно архивы, можно поискать досовский архиватор для них и т.д.
     
  17. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    Так эти строки находятся в F1.exe по адресу dseg03:000C4340 и dseg03:000C435C, только не знаю, которая из них
     
  18. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    Прямо так принтфом всё подряд выводится? AutoBrakeFlag: 0 и AutoBrakeOnOffTick: 1? %d целочисленное значение, никакого On/Off там на выходе быть не может. https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-wsprintfa
    Код (Text):
    1. cseg01:00043F4D                 push    offset aCrashflagD ; "CrashFlag : %d\n"
    2. cseg01:00043F52                 lea     eax, [esp+8]
    3. cseg01:00043F56                 push    eax
    4. cseg01:00043F57                 call    sub_9426A
    5. cseg01:00043F5C                 add     esp, 0Ch
    6. cseg01:00043F5F                 mov     edx, esp
    7. cseg01:00043F61                 mov     eax, ebx
    8. cseg01:00043F63                 call    sub_26820
    9. cseg01:00043F68                 mov     eax, [ebp+1BCh]
    10. cseg01:00043F6E                 sar     eax, 10h
    11. cseg01:00043F71                 push    eax
    12. cseg01:00043F72                 push    offset aSpinrateD ; "SpinRate : %d\n"
    13. cseg01:00043F77                 lea     eax, [esp+8]
    14. cseg01:00043F7B                 push    eax
    15. cseg01:00043F7C                 call    sub_9426A
    16. cseg01:00043F81                 add     esp, 0Ch
    17. cseg01:00043F84                 mov     edx, esp
    18. cseg01:00043F86                 mov     eax, ebx
    19. cseg01:00043F88                 call    sub_26820
    20. cseg01:00043F8D                 mov     eax, [ebp+1BEh]
    21. cseg01:00043F93                 sar     eax, 10h
    22. cseg01:00043F96                 push    eax
    23. cseg01:00043F97                 push    (offset aTautobrakeflag+1) ; "AutoBrakeFlag : %d\n"
    24. cseg01:00043F9C                 lea     eax, [esp+8]
    25. cseg01:00043FA0                 push    eax
    26. cseg01:00043FA1                 call    sub_9426A
    27. cseg01:00043FA6                 add     esp, 0Ch
    28. cseg01:00043FA9                 mov     edx, esp
    29. cseg01:00043FAB                 mov     eax, ebx
    30. cseg01:00043FAD                 call    sub_26820
    31. cseg01:00043FB2                 mov     esi, [ebp+1C4h]
    32. cseg01:00043FB8                 push    esi
    33. cseg01:00043FB9                 push    offset aAutobrakeonoff ; "AutoBrakeOnOffTick : %d\n"
     
  19. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    408
    Но всё равно эти строчки как-то связаны с автоторможением, а тогда зачем они были бы нужны?
     
  20. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    152
    Это вывод параметров в лог или в конфиг, они действительно с ним связаны и по ним можно было бы выйти на эту структуру, если бы удалось бряк на этой функции спровоцировать.