helldrg Опубликовано 28 сентября, 2016 Поделиться Опубликовано 28 сентября, 2016 Здравствуйте! В перехваченной функции HookPresent я отрисовываю спрайт. В простом приложении на d3d8 после инжекта работает отлично, но вот с игрой не работает. После инжекта в игре во время заставки в самом начале спрайт отображается, но когда ролик заканчивается картинка исчезает. Подскажите в чем дело, может устройство пересоздавать надо? Игра C&C:Generals v1.8 P.S.: что бы посмотреть адрес указателя на устройство надо писать так: printf("pDevice: %x\n", *(DWORD*)pDevice); ? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 28 сентября, 2016 Поделиться Опубликовано 28 сентября, 2016 Привет! Вполне может быть, что игра пересоздает объект d3d, когда переключается на проигрывание ролика и обратно. В этом случае у объекта создается новая VMT, так что хук, установленный до этого, будет работать неправильно. Тут нужно перехватить, если я правильно помню, Reset, а в нем уже переустанавливать хук в новое место. Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 28 сентября, 2016 Автор Поделиться Опубликовано 28 сентября, 2016 (изменено) 2 часа назад, keng сказал: переустанавливать хук в новое место. То есть vTable функций смещается и нужно их найти заново, например, создать d3d устройство скопировать адреса нужных функций и удалить устройство? Все таки интересно, что бы посмотреть адрес указателя на устройство надо писать так: printf("pDevice: %x\n", *(DWORD*)pDevice); ? Я пробовал не сразу vTable находить, а после, по нажатию горячей кнопки, но таблица не находится Изменено 28 сентября, 2016 пользователем helldrg Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 28 сентября, 2016 Поделиться Опубликовано 28 сентября, 2016 VMT не смещается, а пересоздается. Спасибо DMA и COM - каждый раз в новом месте. Так что искать нужно заново, но штука в том, что перед тем как умереть интерфейс дернет у себя функцию Reset. Если ее перехватить - ты поймаешь момент, когда нужно будет заново искать VMT, но там много вариантов - например, можно перехватить сразу CreateDevice. Второй вопрос - по-моему, да, так. Третий - значит что-то делаешь неправильно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения