Сейчас на форуме: Rio, vsv1, site-pro (+8 невидимых)

 eXeL@B —› Софт, инструменты —› Скрипт для импорта COM-интерфейсов в IDA
Посл.ответ Сообщение

Ранг: -2.1 (нарушитель)
Активность: 0.010
Статус: Участник

Создано: 27 мая 2013 14:06 · Поправил: sigil
· Личное сообщение · #1

Скрипт позволяет импортировать COM-интерфейсы в Иду, такие, как DirectX 7.0. На самом деле, на других интерфейсах не тестировался, а потому нет уверенности, что будет отрабатывать нормально.

Скрипт берёт .h файлы из SDK и производит .h файл для Иды. Возможен вывод как в виде struct, так и в enum (enum на мой взгляд удобней по некоторым причинам).

Для запуска под виндой потребуется Perl.

Скачать:
comfaces.pl (скрипт)
dx7_structs.h (cтруктуры для DX7, просмотр)
dx7_enums.h (enum-ы для DX7, просмотр)

Примеры использования:

comfaces --ls IDirectPlay*
Code:
  1. IDirectPlay (25)  [dplay.h]
  2. IDirectPlay2 (32)  [dplay.h]
  3. IDirectPlay3 (47)  [dplay.h]
  4. IDirectPlay4 (53)  [dplay.h]
  5. IDirectPlayLobby (14)  [dplobby.h]
  6. IDirectPlayLobby2 (15)  [dplobby.h]
  7. IDirectPlayLobby3 (19)  [dplobby.h]


comfaces --match IDirectInput2?
Code:
  1. struct IDirectInput2A_
  2. {
  3.   /*** IUnknown methods ***/
  4.   DWORD QueryInterface; // (THIS_ REFIID riid, LPVOID * ppvObj)
  5.   DWORD AddRef; // (ULONG)(THIS)
  6.   DWORD Release; // (ULONG)(THIS)
  7.   /*** IDirectInputA methods ***/
  8.   DWORD CreateDevice; // (THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN)
  9.   DWORD EnumDevices; // (THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD)
  10.   DWORD GetDeviceStatus; // (THIS_ REFGUID)
  11.   DWORD RunControlPanel; // (THIS_ HWND,DWORD)
  12.   DWORD Initialize; // (THIS_ HINSTANCE,DWORD)
  13.   /*** IDirectInput2A methods ***/
  14.   DWORD FindDevice; // (THIS_ REFGUID,LPCSTR,LPGUID)
  15. };
  16.  
  17. struct IDirectInput2W_
  18. {
  19.   /*** IUnknown methods ***/
  20.   DWORD QueryInterface; // (THIS_ REFIID riid, LPVOID * ppvObj)
  21.   DWORD AddRef; // (ULONG)(THIS)
  22.   DWORD Release; // (ULONG)(THIS)
  23.   /*** IDirectInputW methods ***/
  24.   DWORD CreateDevice; // (THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN)
  25.   DWORD EnumDevices; // (THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD)
  26.   DWORD GetDeviceStatus; // (THIS_ REFGUID)
  27.   DWORD RunControlPanel; // (THIS_ HWND,DWORD)
  28.   DWORD Initialize; // (THIS_ HINSTANCE,DWORD)
  29.   /*** IDirectInput2W methods ***/
  30.   DWORD FindDevice; // (THIS_ REFGUID,LPCWSTR,LPGUID)
  31. };


comfaces --match IDirectInput2W -s
Code:
  1. DECLARE_INTERFACE_(IDirectInput2W, IDirectInputW) {
  2.     /*** IUnknown methods ***/
  3.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  4.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  5.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  6.     /*** IDirectInputW methods ***/
  7.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;
  8.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;
  9.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  10.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  11.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  12.     /*** IDirectInput2W methods ***/
  13.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE;
  14. };


comfaces --match IDirectInput2W --produce=enum
Code:
  1. enum IDirectInput2W_
  2. {
  3.   /*** IUnknown methods ***/
  4.   IDirectInput2W__QueryInterface = 0x0, // (THIS_ REFIID riid, LPVOID * ppvObj)
  5.   IDirectInput2W__AddRef = 0x4, // (ULONG)(THIS)
  6.   IDirectInput2W__Release = 0x8, // (ULONG)(THIS)
  7.   /*** IDirectInputW methods ***/
  8.   IDirectInput2W__CreateDevice = 0xC, // (THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN)
  9.   IDirectInput2W__EnumDevices = 0x10, // (THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD)
  10.   IDirectInput2W__GetDeviceStatus = 0x14, // (THIS_ REFGUID)
  11.   IDirectInput2W__RunControlPanel = 0x18, // (THIS_ HWND,DWORD)
  12.   IDirectInput2W__Initialize = 0x1C, // (THIS_ HINSTANCE,DWORD)
  13.   /*** IDirectInput2W methods ***/
  14.   IDirectInput2W__FindDevice = 0x20, // (THIS_ REFGUID,LPCWSTR,LPGUID)
  15. };


comfaces --help
Code:
  1. Usage:
  2.     comfaces.pl [COMMAND] [OPTION]... DIR|FILE...
  3.  
  4. Commands:
  5.     (default command)
  6.         Produce IDA-compatible structures from DECLARE_INTERFACE_
  7.         directives.
  8.  
  9.     --check
  10.         Apply --parse-errors=show and do not show anything except errors.
  11.  
  12.     --list-class, --lsc NAME
  13.         Show methods by class name.
  14.  
  15.     --list-classes, --ls [MASK]
  16.         Show all classes along with method counts and file origins.
  17.  
  18.     --source, -s
  19.         Dump sources of parsed classes.
  20.  
  21. Options:
  22.     --context[-lines], -C NUM
  23.         Show NUM count of lines before the line that caused any error,
  24.         including that line. 0 turns off context printing. Default: 3
  25.  
  26.     --duplicates, --dups fail | force | skip | overwrite
  27.         Duplicates are classes with same name.
  28.  
  29.          'fail' will fail on any duplicate class;
  30.          'force' will handle duplicates like normal classes;
  31.          'skip' will skip any duplicates except the first;
  32.          'overwrite' will skip duplicates except the last.
  33.         Default: fail
  34.  
  35.     --filemask MASKLIST
  36.         MASKLIST is comma-separated list of file masks. When opening DIR use
  37.         these masks to find files. Default: *.h,*.hpp
  38.  
  39.     --ignore-case, -i
  40.         Ignore case in MASK or REGEX.
  41.  
  42.     --match-classes, --match, -m MASK
  43.         Skip classes that do not match filemask MASK.
  44.  
  45.     --match-regex, --regex REGEX
  46.         Skip classes that do not match regular expression REGEX.
  47.  
  48.     --parse-errors, -e fail | show | skip
  49.          'fail' will show parsing error and will stop processing;
  50.          'show' will show parsing error and will continue processing;
  51.          'skip' will ignore any parsing errors.
  52.         Default: fail
  53.  
  54.     --postfix, -STR
  55.         Add STR at the end of structure names in generated output.
  56.         Default: _
  57.  
  58.     --prefix, -STR
  59.         Add STR at the beginning of structure names in generated output.
  60.         Default: (none)
  61.  
  62.     --infix, -STR
  63.         Add STR between structure name and enum member name (used only with
  64.         --produce=enum). Default: __
  65.  
  66.     --produce-mode, -p struct | enum
  67.         Produce structures or enums. Default: struct
  68.  
  69.     --nosort
  70.         Don't sort structures alphabetically.





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 27 мая 2013 14:35
· Личное сообщение · #2

а ида что не парсит обычные h файлы?



Ранг: -2.1 (нарушитель)
Активность: 0.010
Статус: Участник

Создано: 27 мая 2013 14:45
· Личное сообщение · #3

Виртуальные интерфейсы C++ она не понимает.



Ранг: 58.0 (постоянный), 13thx
Активность: 0.020.01
Статус: Участник

Создано: 29 мая 2013 05:55
· Личное сообщение · #4

COM работает замечательно в C режиме (см. /* C style interface */ в хидерах). И все интерфейсы уже пропарсенные есть в mssdk/vc6win.til.



Ранг: -2.1 (нарушитель)
Активность: 0.010
Статус: Участник

Создано: 29 мая 2013 11:30
· Личное сообщение · #5

Все, да не все... Подключил vc6win.til, делаю поиск по GetBltStatus -- не находит. Нет такой строки "C style interface" в DirectX 7 SDK.



Ранг: 58.0 (постоянный), 13thx
Активность: 0.020.01
Статус: Участник

Создано: 29 мая 2013 13:53
· Личное сообщение · #6

У меня всё на месте:

Code:
  1. 0000000 IDirectDrawSurfaceVtbl struc ; (sizeof=0x90, standard type)
  2. 00000000 QueryInterface  dd ?                    ; offset
  3. 00000004 AddRef          dd ?                    ; offset
  4. 00000008 Release         dd ?                    ; offset
  5. 0000000C AddAttachedSurface dd ?                 ; offset
  6. 00000010 AddOverlayDirtyRect dd ?                ; offset
  7. 00000014 Blt             dd ?                    ; offset
  8. 00000018 BltBatch        dd ?                    ; offset
  9. 0000001C BltFast         dd ?                    ; offset
  10. 00000020 DeleteAttachedSurface dd ?              ; offset
  11. 00000024 EnumAttachedSurfaces dd ?               ; offset
  12. 00000028 EnumOverlayZOrders dd ?                 ; offset
  13. 0000002C Flip            dd ?                    ; offset
  14. 00000030 GetAttachedSurface dd ?                 ; offset
  15. 00000034 GetBltStatus    dd ?                    ; offset
  16. 00000038 GetCaps         dd ?                    ; offset
  17. 0000003C GetClipper      dd ?                    ; offset
  18. 00000040 GetColorKey     dd ?                    ; offset
  19. 00000044 GetDC           dd ?                    ; offset
  20. 00000048 GetFlipStatus   dd ?                    ; offset
  21. 0000004C GetOverlayPosition dd ?                 ; offset
  22. 00000050 GetPalette      dd ?                    ; offset
  23. 00000054 GetPixelFormat  dd ?                    ; offset
  24. 00000058 GetSurfaceDesc  dd ?                    ; offset
  25. 0000005C Initialize      dd ?                    ; offset
  26. 00000060 IsLost          dd ?                    ; offset
  27. 00000064 Lock            dd ?                    ; offset
  28. 00000068 ReleaseDC       dd ?                    ; offset
  29. 0000006C Restore         dd ?                    ; offset
  30. 00000070 SetClipper      dd ?                    ; offset
  31. 00000074 SetColorKey     dd ?                    ; offset
  32. 00000078 SetOverlayPosition dd ?                 ; offset
  33. 0000007C SetPalette      dd ?                    ; offset
  34. 00000080 Unlock          dd ?                    ; offset
  35. 00000084 UpdateOverlay   dd ?                    ; offset
  36. 00000088 UpdateOverlayDisplay dd ?               ; offset
  37. 0000008C UpdateOverlayZOrder dd ?                ; offset
  38. 00000090 IDirectDrawSurfaceVtbl ends




Ранг: -2.1 (нарушитель)
Активность: 0.010
Статус: Участник

Создано: 29 мая 2013 18:53
· Личное сообщение · #7

И правда, есть такая структура. Но поиск всё равно почему-то не работает... Нам проще скрипты на perl писать, чем скроллбаром пользоваться!




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 29 мая 2013 18:57
· Личное сообщение · #8

Ctrl+T
Alt+T
помоему всегда работали если неошибаюсь

| Сообщение посчитали полезным: plutos
 eXeL@B —› Софт, инструменты —› Скрипт для импорта COM-интерфейсов в IDA
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати