Мониторинг вызовов приложений в DLL

Вкратце: я хочу отслеживать выбранные вызовы из приложения в DLL.

У нас есть старое приложение VB6, для которого мы потеряли исходный код (тогда компания не использовала исходный код..). Это приложение использует стороннюю DLL.

Я хочу использовать эту DLL в новом приложении на С++. К сожалению, DLL API только частично документирован, поэтому я не знаю, как вызвать некоторые функции. У меня есть подпись функций.

Поскольку приложение VB6 использует эту DLL, я хочу посмотреть, как он вызывает несколько функций. Пока я пробовал или смотрел -

  • APIHijack - требует, чтобы я написал код С++ для каждой функции. Поскольку мне нужно только регистрировать значения, это кажется излишним.
  • EasyHook - то же самое, что и 1, но позволяет писать в коде на языке .NET.
  • OllyDbg с uHooker - я все равно придется писать код для каждой функции, на этот раз в Python. Кроме того, я должен сделать много преобразований в Python с помощью модуля struct, поскольку большинство функций передают значения с помощью указателей.

Поскольку мне нужно только регистрировать параметры функций, я хочу простое решение. Есть ли какой-либо автоматизированный инструмент, для которого я мог бы сказать, какие функции контролировать и их подпись, а затем получить подробный файл журнала?

Ответ 1

Еще один поиск в Google нашел то, что я искал: WinAPIOverride32. Он позволяет писать текстовые файлы, такие как:

CustomApi.dll|void NameOfFunction(long param1, double& param2);

В дальнейшем эти файлы могут использоваться внутри программы для регистрации всех вызовов на NameOfFunction. Теперь мне просто нужно выяснить, как записывать массивы и параметры структуры.

Ответ 2

"Статическое" решение (в том смысле, что оно может захватывать трассировку стека по запросу) было бы Process Monitor.

Process Monitor

Более динамичное решение будет ApiMonitor, но может быть слишком старым, чтобы быть совместимым с приложениями для мониторинга. Однако стоит попробовать.

http://www.rohitab.com/gallery/api-monitor-2-0/Основной-window.png

Ответ 3

Visual Studio Addin Runtime Flow здесь:

Runtime Flow в режиме реального времени контролирует и регистрирует вызовы функций и параметров функции в вашем запущенном приложении .NET и показывает стек следы дерево. Для мониторинга не требуется никаких инструментов или исходного кода.