Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, уважаемые обитатели форума! Прошу прощения за дублирование темы, но предыдущая перешла из раздела Delphi В общем задача у меня такая: 1) Имеется видеорегистратор Wolfcom Vision. При подключении устройства определяется как libusb-win32 drivers\Wolfcom Vision Driver 1.2.3.0 2) Существует ПО для управления этим видеорегистратором, и в этом ПО есть кнопочка Connect Device, которая посылает некую команда в устройство, после чего оно переходит в режим накопителя, и начинает определяться как обычная флешка. 3) Задача: Написать программку, которая смогла бы отправить эту команду. Вместе с родным ПО идут библиотеки libusb0.dll и PW01_func.dll. Про libusb0 я понял и нашел warper для Delphi, пробовал захватывать и анализировать трафик через USBcap.exe и Wireshark, чтобы узнать какую команду он отправляет, но не смог разобраться... Но потом поковыряв PW01_func я понял, что эта как раз та библиотека, что используется для отправки команд устройству. Попробовал экспортировать dll в Delphi через Components\Export Type Lib но оно выдает ошибку... - Нашел способ как вытащить имена функций, и вызывать их из Delphi, но оно выдаёт ошибки Accses... - С помощью IDA вытянул таблицу импорта: .idata:00406368 ; Imports from PW01_func.dll .idata:00406368 ; .idata:00406368 ; public: int __thiscall CPW01_Device::GetDeviceSerialNo(unsigned char *, int) .idata:00406368 extrn ?GetDeviceSerialNo@CPW01_Device@@QAEHPAEH@Z:dword .idata:00406368 ; DATA XREF: sub_404450+E7r .idata:0040636C ; public: int __thiscall CPW01_Device::GetDeviceSetup(unsigned char *, int) .idata:0040636C extrn ?GetDeviceSetup@CPW01_Device@@QAEHPAEH@Z:dword .idata:0040636C ; DATA XREF: sub_404450+142r .idata:00406370 ; public: __thiscall CPW01_DevSearch::CPW01_DevSearch(unsigned long *) .idata:00406370 extrn ??0CPW01_DevSearch@@QAE@PAK@Z:dword .idata:00406370 ; DATA XREF: sub_403E20+2Fr .idata:00406374 ; public: void __thiscall CPW01_DevSearch::EnumerateHostControllers(void) .idata:00406374 extrn ?EnumerateHostControllers@CPW01_DevSearch@@QAEXXZ:dword .idata:00406374 ; DATA XREF: sub_403E20+44r .idata:00406378 ; public: int __thiscall CPW01_Device::GetDevicePassword(unsigned char *, int) .idata:00406378 extrn ?GetDevicePassword@CPW01_Device@@QAEHPAEH@Z:dword .idata:00406378 ; DATA XREF: sub_403E20+ABr .idata:0040637C ; public: virtual __thiscall CPW01_DevSearch::~CPW01_DevSearch(void) .idata:0040637C extrn ??1CPW01_DevSearch@@UAE@XZ:dword .idata:0040637C ; DATA XREF: sub_403E20+134r .idata:0040637C ; sub_403E20+16Ar ... .idata:00406380 ; public: int __thiscall CPW01_Device::SetDeviceMassStorage(void) .idata:00406380 extrn ?SetDeviceMassStorage@CPW01_Device@@QAEHXZ:dword .idata:00406380 ; DATA XREF: sub_403D40+5Er .idata:00406384 ; public: int __thiscall CPW01_Device::IsDevicePlugin(void) .idata:00406384 extrn ?IsDevicePlugin@CPW01_Device@@QAEHXZ:dword .idata:00406384 ; DATA XREF: sub_403720+32r .idata:00406384 ; sub_403D40+36r ... .idata:00406388 ; public: int __thiscall CPW01_Device::SetDevicePassword(class CString) .idata:00406388 extrn ?SetDevicePassword@CPW01_Device@@QAEHVCString@@@Z:dword .idata:00406388 ; DATA XREF: sub_403720+DBr .idata:00406388 ; sub_404620+8Ar .idata:0040638C ; public: int __thiscall CPW01_Device::SetDevicePoliceNo(class CString) .idata:0040638C extrn ?SetDevicePoliceNo@CPW01_Device@@QAEHVCString@@@Z:dword .idata:0040638C ; DATA XREF: sub_403720+216r .idata:00406390 ; public: int __thiscall CPW01_Device::SetDeviceSetup(class CString) .idata:00406390 extrn ?SetDeviceSetup@CPW01_Device@@QAEHVCString@@@Z:dword .idata:00406390 ; DATA XREF: sub_403720+5A8r .idata:00406394 ; public: __thiscall CPW01_Device::CPW01_Device(void) .idata:00406394 extrn ??0CPW01_Device@@QAE@XZ:dword .idata:00406394 ; DATA XREF: sub_403680+1Cr .idata:00406394 ; sub_403720+22r ... .idata:00406398 ; public: int __thiscall CPW01_Device::SetDeviceTime(void) .idata:00406398 extrn ?SetDeviceTime@CPW01_Device@@QAEHXZ:dword .idata:00406398 ; DATA XREF: sub_403680+2Er .idata:00406398 ; sub_403720+120r .idata:0040639C ; public: virtual __thiscall CPW01_Device::~CPW01_Device(void) .idata:0040639C extrn ??1CPW01_Device@@UAE@XZ:dword .idata:0040639C ; DATA XREF: sub_403680+40r .idata:0040639C ; sub_403720+604r ... .idata:004063A0 ; public: int __thiscall CPW01_Device::GetDevicePoliceNo(unsigned char *, int) .idata:004063A0 extrn ?GetDevicePoliceNo@CPW01_Device@@QAEHPAEH@Z:dword .idata:004063A0 ; DATA XREF: sub_404450+8Cr Выяснилось, что библиотека использует __thiscall, и из Delphi её неправильно вызывать, так как delphi не умеет __thiscall... - С помощью IDA и HEX-Reys декомпилировал родное ПО, вот несколько функций, которые мне нужны. Только не могу сообразить как это работает... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. - Сейчас пробую писать свою библиотеку, которая будет вызывать нужную: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. Но опять же получаю лишь исключение: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000008. Подскажите пожалуйста, где я ошибаюсь, и в какую сторону мне копать... На всякий случай прикрепляю библиотеки и исходники полученные в IDA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 14:41 |
|
||
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
Keremet2030Подскажите пожалуйста, где я ошибаюсь, и в какую сторону мне копать... Копать в сторону не инициализированных указателей на объекты. Адрес, по которому происходит исключение, в сочетании с map и особенно call stack сделает копание простым и быстрым. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 14:49 |
|
||
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovKeremet2030Подскажите пожалуйста, где я ошибаюсь, и в какую сторону мне копать... Копать в сторону не инициализированных указателей на объекты. Адрес, по которому происходит исключение, в сочетании с map и особенно call stack сделает копание простым и быстрым. А можно поподробнее, киньте в меня пару ссылок, или не затруднит ли Вас написать мааааленький пример. Я с VS знаком совсем недавно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 14:56 |
|
||
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
Keremet2030, не туда вы куда-то полезли с GetProcAddress... Достаете из dll список экспорта, делаете .def файл - ну вот такой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. компилируете Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 16:24 |
|
||
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
Так конечно нехорошо, размер объекта то мы не знаем, и память под него не выделится. Ну можно что-нибудь фиктивное с запасом нарисовать Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 20:42 |
|
||
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
BarloneKeremet2030, не туда вы куда-то полезли с GetProcAddress... Достаете из dll список экспорта, делаете .def файл - ну вот такой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. компилируете Код: plaintext ВЫ ГЕНИЙ! Всё завелось с пол-пинка! Спасибо огромное за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 05:56 |
|
||
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
BarloneТак конечно нехорошо, размер объекта то мы не знаем, и память под него не выделится. Ну можно что-нибудь фиктивное с запасом нарисовать Код: plaintext 1. 2. 3. 4. Видно размер на стеке - 16 байт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 09:31 |
|
||
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
Siemargl, а где видно? Если видно, можно правильный размер поставить. Ну больше то не страшно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 07:30 |
|
||
|
Использование сторонней библиотеки
|
|||
|---|---|---|---|
|
#18+
Barlone, В дизассемблере конечно. В первой функции v8 это CPW01_DevSearch размером 14h, v7 это CPW01_Device, хм - 8 байт (в другом куске 20305653 видимо было выравнивание). Значит 8, но больше не меньше, можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 10:20 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39421580&tid=2018240]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 298ms |
| total: | 553ms |

| 0 / 0 |
