Слежение за DLL

Тема в разделе "WASM.RESEARCH", создана пользователем misyachniy, 9 ноя 2005.

  1. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    Понадобилось подсмотреть за программой работающей через DLL.

    Описание на DLL есть.

    Через эту DLL я сам поработал, разобрался как работает.

    Захотел запустить под wdasm 8.7 и 10 программу которая работает с DLL - вываливается из WDASM при команде LOAD.

    Решил вставить прокладочку.

    Из файла ALF который создал wdasm для DLL.

    Вытащил имена функций и написал на DELPHI собственную DLL для подмены.
    Код (Text):
    1.  
    2. //---------------------
    3. function FT_ListDevices:dword;stdcall;
    4. asm
    5.  pushad
    6.  mov eax,001Ch
    7.  Call Files              // ЛОГ
    8.  popad
    9.  call _FT_ListDevices    // перенаправление вызова
    10.  ret
    11. end;
    12. //---------------------
    13.  




    Вызов передрал с примера обращения к DLL


    Код (Text):
    1.  
    2. function _FT_ListDevices(pvArg1:Pointer;pvArg2:Pointer;dwFlags:Dword) : FT_Result ; stdcall ; External FT_DLL_Name name 'FT_ListDevices';
    3.  




    В лог записывается старт DLL, Вызов первой функции и все.

    Куда копать?

    Спасибо.
     
  2. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    проверь по alt+ctrl+C что Delphi не вставил лишний код пролога и по необходимости используй ключ {$O+} или {$O-}.
     
  3. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    Проблема была в том, что в стек заталкивался лишний адрес и входные/выходные данные в стеке сдвигались.

    При замене call на jmp все срослось.

    Для анализа возвращаемы данных работает такая конструкция.

    [pre]

    pop dword ptr RealRet // сохраним адрес возврата

    call _FT_Write // вызовем функцию за которой следимм

    push dword ptr RealRet // востановим адрес возврата

    ret

    [/pre]



    WDASM по прежнему вылетает и под WIN ME и под WIN XP.

    Может памяти не хватает?
     
  4. Peshuha

    Peshuha New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2003
    Сообщения:
    41
    А прога многопоточная?
     
  5. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    Наверное многопоточная. Это среда проектирования FPGA/CPLD Quartus (версия 4.2 в моем сучае)
     
  6. Peshuha

    Peshuha New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2003
    Сообщения:
    41
    Тады надо делать копию обратного джампа и на него ссылаться, но смотри память не поколечь!
     
  7. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    WDASM 10 - жестоко похаченый 8.93. Найди оригинал 8.93 - работает вполне стабильно, хотя и выкидывает какую-то придурь при попытке листать страницы кнопками PgUp/PgDown.
     
  8. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    WDASM 8.90 падает сразу при загрузке программы.

    WDASM 8.93 загружает программу и несколько десятков DLL, а затем падает.

    Есть ли еще какой инструмент слежения за программами и dll?

    Удобный и не сложный в изучении :)

    Спасибо.
     
  9. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    мониторинг API обмена с DLL: APISPY v.2.5
     
  10. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine