Мониторинг вызовов приложений в 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 и показывает стек следы дерево. Для мониторинга не требуется никаких инструментов или исходного кода.