отладка 3D приложения в OllyDbg + нужен плагин

Тема в разделе "WASM.DirectX", создана пользователем tex32, 25 окт 2009.

  1. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Подскажите плагин или еще чего, что позволит в отлаживаемой 3D программе увидеть структуры и интерфейсы DirectX. Может есть возможность присвоить связи в ручном режиме?

    Читал, что DX использует виртуальные функции, так как он работает по COM технологии. Вызов функции производиться расчетом смещения от ф. CallBack. Вот только как увидеть структуры DX, которые в приложении выделены под нужды программы. Например, Caps, DevCaps и другие.

    Скачивал pdb файлы для dll directx, но это не то.

    ps. Еще вопрос в IDA есть возможность расспознать структуры?
     
  2. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    pdb -> Symbol Type Viewer -> idc
     
  3. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    tex32 в иде можно самому задавать структуры и применять их к данным
    на крайний случай, можешь дх-логгером посмотреть
     
  4. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Спасибо, обязательно попробую ваши советы. А под ollydbg нет похожего?
     
  5. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    tex32
    Как вариант, если приложение твое. И отладчиком сложно, то можешь выводить в свой лог все что интересует- значения переменных, структуры итп.
     
  6. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Rustem
    Изучаю технологию отладки на примере из Dx SDK. Поэтому использовать лог можно, но хотелось бы разобраться, как выполнить все операции в отладчике внутри чужого приложения. Пробовал дх-логгер, спасибо, помогает очень.

    o14189
    Вопрос, вот в чем, если у меня нет pdb файла для отлаживаемой программы. Программа чужая, отладка ведеться в слепую (нет исходников), у меня есть только набор системных отладочных символов скаченных с сайта ms, это может помочь или нет?

    Скачал Symbol Type Viewer, пробовал, что-то он сильно сложный. Поставил отладочные символы в каталог "C:\Windows\symbols" прописал в окружение "_NT_SYMBOL_PATH=C:\Windows\symbols" пробовал запускать, программа пишет "не могу найти символы." Или она ищет pdb отлаживаемой программы?

    Пробовал в ИДА загружать idc файл, но не увидел изменений в листинге отлаживаемой программы, если можно разъясните, что должно произойти.
     
  7. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Symbol Type Viewer не качает pdb. Хотя пишет в строке состояния "pdb ... loaded." Уже все настроил, выставил параметры. Может можно заставить его построить idc файл на основе локальных отладочных символов или он работает только со скаченными самостоятельно.
     
  8. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    tex32
    если нет исходников проги, то pdb символы с сайта мс при отладке не помогут
     
  9. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Rustem это понятно. pdb символы с сайта мс я хочу использовать, чтобы в отлаживаемой программе было больше понятного кода. В 3d программе используеться структуры и функции из DX, их я и хочу найти. Желательно, чтобы это выглядело, как ollydbg находит и показывает системные функции. Думаю, что надо читать, как писать плагины.
     
  10. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    tex32
    OllyDbg показывает функции по ее имени в экспорте + у нее есть сигнатуры популярных функции.
    В директиксе все методы виртуальные. просто так имени не получишь, а получишь код вида
    push param
    push param2
    ....
    push pobj
    call [eax+NN]

    Например, возьмем интерфейс IDirect3DDevice8
    Для него NN будет след
    0 {"IDirect3DDevice8_QueryInterface"},//0
    4 {"IDirect3DDevice8_AddRef"},//1
    8 {"IDirect3DDevice8_Release"},//2
    12 {"IDirect3DDevice8_TestCooperativeLevel"},//3
    16 {"IDirect3DDevice8_GetAvailableTextureMem"},//4
    20 {"IDirect3DDevice8_ResourceManagerDiscardBytes"},//5
    24 {"IDirect3DDevice8_GetDirect3D"},//6
    .....


    Если хочешь изучить прогу, то лучше делай это в ида, а дебагер используй для уточнения неясных деталей. поля структур оля не показывает, а в иде это легко
    PS что за прогу реверсишь то?
     
  11. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Rustem спасибо за помощь. Действительно в OllyDbg все так и происходит, ты очень хорошо это описал. Насколько я понял push pobj всегда один и тот же, меняеться только значения param и +NN.

    Я просто больше знаком с OllyDbg, чем с ида. Начал читать статьи по ида, наберусь опыта, тогда уже начну понимать, всё что многим уже давно известно и не вызывает затруднений.
    Программа из DirectX SDK называеться Blobs.exe. Взял ее, хотя там можно взять любую.