User Tag List

Показано с 1 по 5 из 5

Тема: Unreal Speccy с трассировкой кадра

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #5

    Регистрация
    10.07.2009
    Адрес
    Санкт-Петербург
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Matador Посмотреть сообщение
    К сожалению ни один эмуль такой простой вещи не позволяет сделать. Пришлось искать исходники Unreal Speccy адаптированные для Visual Studio 2008 и делать фикс.
    Буквально месяц назад сделал подобное. Только не искал "адаптированные исходники" (что за ламерство?), а за полчаса сделал проект для студии из последнего снапшота сорцов от Deathsoft.

    Мой трассер больше предназначен для игр, и не привязан к фрейму. (Понятно, что добавить привязку к фрейму тривиально) Он трассирует всё. Какие ячейки писались, читались, исполнялись, обнулялись. Для этого пришлось серъёзно перепахать коллбеки из команд, т.к. там были события на чтение и запись, но не было на исполнение. То есть не отличить чтение от исполнения, Только m1_cycle можно было ловить, исполнение первого байта команды, что меня не устраивало.

    Для каждой ячейки строится список команд, обращавшихся к ней. Запоминается какое именно было обращение, сколько раз. По этим данным нетрудно в динамике построить обратные таблицы - куда лазила какая команда.

    Для начала записи лога в игре доходим до интересующего нас момента (как правило начало игрового процесса, когда управление выбрано, все стартовые мессаги завершились и т.д.). Жмём хоткей и сбор статистики начинается. В это время бегаем по уровню, делаем всё то, что хотелось бы потом проанализировать. Размер статистики растёт только до определённого момента, его рост всё время замедляется и в пределе останавливается, только счётчики продолжают накручиваться. В завершении жмём другой хоткей (всё настраивается в INI файле) и эмулятор сохраняет файл-лог.

    Для всего этого дела написал вьювер. В котором можно быстро просматривать дамп. С подсветкой строк (например - жёлтые это исполнение, синие - самомодифицирующийся код, красные - запись в ячейку и т.д.). При выборе инструкции, если она писала в экран, это сразу же визуализируется в графическом виде, на битмапке в форме speccy-экрана, разлинованной по знакоместам. А также сделал функции автопоиска таблиц (отражения, автомаски, экранные адреса) и спрайтов. Плюс просмотрщик памяти, чтобы искать графику "вручную".

    Немного интересных фактов, которые уже удалось нарыть:
    - Mirror Table в играх Dave Thompson-а размещается в быстрой памяти, хотя хватило бы и медленной. Rafael Cecco размещает эту таблицу в медленной памяти.
    - Saboteur2 и Satan размещают эту таблицу и обращаются к ней крайне по-идиотски.
    - копирование бек-буфера на экран в играх Dave Thompson-a (Yogi Great Escape, Scooby&Scrappy Doo, Hong Kong Phooey, Potsworth&Co) абсолютно такое же, как и в более ранних играх Mike Lamb-а (Robocop, Batman-3). Видимо Dave утащил идею, когда 1988 работал на Ocean Хотя кто знает...
    - отрисовка экрана в Wacky Races содержит баг: один байт не отрисовывается.


    Вот пара примеров работы с дампом:

    Поиск inner-loops:
    Группируем байты по типу доступа Execute. Выбираем рассчёт частоты исполнения по доступу Execute. Сортируем созданные блоки по столбцу Frequence. Блоки кода будут отсортированы от наболее часто исполнявшихся к наименее.

    Поиск самомодифицирущегося кода и кто этот код генерирует:
    Группируем байты по типу доступа Execute & Write. Видим все самомодифицирующиеся блоки. Если надо, сортируем по частоте исполнения или модификации, по размеру. Выбирая блок, в соседнем списке видим все команды, к нему обращавшиеся. Двойной щелчок на команде делает прыжок на блок кода, в который входит данная команда (то есть на генератор самомодифицирующегося кода)

    Пока играюсь с этим делом, обкатываю, дописываю функционал. Сейчас вот хочу дизассемблер прилепить, а то каждый раз переключаться в IDA неудобно. И переделать диалоговый UI на Docking Panes. Когда пойму что готово - выложу на http://omegahg.com.
    Последний раз редактировалось Screw; 15.08.2011 в 14:05.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Порт Unreal Speccy под Linux!
    от ^m00h^ в разделе Эмуляторы
    Ответов: 63
    Последнее: 24.07.2025, 01:02
  2. Настройщик Unreal Speccy
    от Dr.Lion/RSM в разделе Эмуляторы
    Ответов: 97
    Последнее: 03.03.2008, 14:12
  3. unreal speccy ряд вопросов по monitor
    от Raider в разделе Эмуляторы
    Ответов: 83
    Последнее: 25.10.2005, 00:59
  4. unreal speccy beakpoints
    от Raider в разделе Эмуляторы
    Ответов: 2
    Последнее: 10.07.2005, 23:13

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •