2013-09-27 10 views
2

У меня есть devilish-gui.exe, a devilish.dll и devilish.h из C-кода, которая была утеряна.
devilish-gui до сих пор используется от клиента, и он использует devilish.dllКак перехватить вызовы библиотеки C в окнах?

devilish.h плохо документированы в 30-страниц PDF: она предоставляет несколько функций C, которые ведут себя по-разному в зависимости от значений в структурах, предусмотренных как аргументы.

Теперь, я должен использовать devilish.dll, чтобы написать новый дьявольский веб-сервис. Нет, я не могу переписать его.

Документация практически бесполезна, но поскольку у меня есть devilish-gui.exe, я бы хотел написать другую реализацию devilish.h так, чтобы она вызывала вызов и аргументы функции журнала в файле, а не вызывала оригинал dll. Нечто похожее на то, что делает ltrace на linux, но специализируется на этой странной библиотеке.

Как написать такую ​​«перехватывающую» dll на windows и ввести ее между devilish.dll и devilish-gui.exe?

+0

Не могли бы вы реализовать собственный 'devilish.dll', который внутренне выполняет' LoadLibrary() 'в исходной версии, и вы реализуете все API-интерфейсы для вызова исходной версии, за исключением тех вызовов, которые вы действительно хотите комментировать? – jxh

+0

Возможный дубликат [LD \ _PRELOAD эквивалент для Windows для предварительной загрузки разделяемых библиотек] (http://stackoverflow.com/questions/1178257/ld-preload-equivalent-for-windows-to-preload-shared-libraries) – jxh

+0

Да, это то, что я хотел бы сделать, но в окнах я понятия не имею, как заставить devilish-gui загружать мою собственную реализацию. Единственное ограничение состоит в том, что я не могу изменить ни devilish-gui, ни devilish.dll. –

ответ

3

Несколько возможностей:

  1. Использование Detours.
  2. Если вы разместили свою реализацию devilish.dll в том же каталоге, что и devilish-gui.exe, и переместите реальную реализацию devilish.dll в подкаталог, Windows загрузит вашу реализацию вместо реальной. Затем ваша реализация может перейти к реальному. Я предполагаю, что devilish-gui не является hardened against search path attacks.
  3. Другим подходом было бы использовать IntelliTrace для сбора журнала трассировки всех вызовов в devilish.dll.
+0

Хорошие ссылки. Можете ли вы предложить альтернативу с открытым исходным кодом для Detours? В частности, devilish.dll и gui - это программы x86, но мы запускаем их на рабочих столах x64 Windows 8. –

+0

@ GiacomoTesio Некоторые быстрые результаты поиска в google ссылаются на [EasyHook] (http://code.google.com/p/easyhook-continuing-detours/), но я не использовал его, поэтому я не могу комментировать дальше , Если у вас есть VS 2012, Intellitrace тоже может помочь. –

+0

IntelliTrace - это вариант, поскольку gui был написан на C. –

Смежные вопросы