поправить вызов IDirect3D9::CreateDevice

Тема в разделе "WASM.BEGINNERS", создана пользователем mega_john, 3 дек 2008.

  1. mega_john

    mega_john New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    16
    Приветствую всех!
    Есть некая 3D программа, в которой необходимо поправить вызов CreateDevice, точнее добавить флаг D3DCREATE_MULTITHREADED, да вот только не понятно как найти где это вызывается?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    mega_john
    Не обязательно искать функцию, достаточно сделать фейковую d3d9 и перенаправить из неё на настоящую d3d9. Недавно делал подобное.
     
  3. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Держи. Мой логгер директикса.
    В settings.ini укажи что хочешь перехватывать

    http://slil.ru/26396810

    Кстати, дллку из архива можешь переименовать в d3d9.dll и кинуть в папку с прогой.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rustem
    Кстати в Вашем логере есть один неприятный баг, если в программе несколько вызовов Direct3DCreate9, CreateDevice то она зацикливается. Мне однажды потребовалось логировать вызовы одной программы, но увы пришлось от этого отказаться. Вообщем нужно делать проверку на повторный хук. :)
     
  5. mega_john

    mega_john New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    16
    да не хочеца чтото с проксей заморачиваться, мне бы просто пропатчить длл в которой все происходит...

    первый столбец это адрес вызова функции? как теперь найти это место в длл?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    mega_john
    Ну так пропатч, в чём проблема-то? А найти место довольно просто, нужно посмотреть адрес возврата из CreateDevice.
     
  7. mega_john

    mega_john New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    16
    проблем несколько, первая тупость;) , а вторая куда бряк ставить, чтобы посмотреть адрес возврата? пользую ollydbg
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Думаю с бряком будет проблематично, так как функции COM не торчат наружу. Так что логер здесь самое оно. Хотя можно перехватить Direct3DCreate9, и поставить бряк в возвращаемом ей интерфейсе на метод CreateDevice. Вот так. Хотя если тебе повезёт, то Direct3DCreate9 и CreateDevice будут рядом.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rustem
    Что же Вы фидбек игнорите. В керберосе как понимаю косяки не решены и тут.
     
  10. mega_john

    mega_john New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    16
    да я в курсе про виртуальные функции...потому и возник вопрос как в длл бряк поставить, она же еще не загружена, а когда загружена уже поздно. может какой другой отладчик посоветуете?
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    mega_john
    Options -> Debugging options -> Events -> Break on new module (DLL)
     
  12. mega_john

    mega_john New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    16
    это я видел, только там подгружается 400 с лишним длл, неужто нету способа по дружественней? ато до утра пыкать придется?
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    mega_john
    Можно забить 0CCh на точку входа в dll.
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    А не проще всё-таки сделать лог? Пока тут рассуждаем, можно было-бы много раз dll сделать. Ещё можно попробовать условный бряк внутри LoadLibrary.
     
  15. mega_john

    mega_john New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    16
    попробовал сделать прокси, фпс упал более чем в раза, совершенно не клева...
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    mega_john
    Шутите.
     
  17. mega_john

    mega_john New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    16
    честное пионерское;) , хотя про 2 раза я конечно погорячился, 145 фпс против 205. в любом случае прокся помогла узнать откуда идет вызов и пропатчить его, вобщем спасибо всем за помощь!

    ЗЫЖ это, если интересно проверить http://slil.ru/26398906
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    mega_john
    Откуда там падение? Может там что ещё есть? Например debug.
     
  19. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Booster
    Можно взглянуть на ту программу где множественные вызовы Direct3DCreate9, CreateDevice ?
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Пожалста, там 2 вызова Direct3DCreate9. В логе только самые первые записи, которые пишутся до бесконечности.