proxy dll
От: Jakop Россия https://wmspanel.com
Дата: 13.10.10 13:21
Оценка: 20 (3)
Бывает, что дебажить код в dll-ке утомительно, но при этом хочется знать с какими параметрами вызываются функции. К тому же часто в код библиотек добавляются противоотладочные средства, однако предлагаемый подход работает нормально даже там.

Навеяно статьей, которая и легла в основу проекта:
http://www.codeproject.com/KB/DLL/CreateYourProxyDLLs.aspx

Автор статьи оставил логирование параметров в качестве домашнего задания, а я предлагаю классу ознакомиться с моим вариантом:
здесь

Что делает проект: проект делает библиотеку, которая по экспорту является точной копией исходной либы.
Затем после запуска приложения все вызовы к исходной либе проходят через наш прокси. Код, который генерируется для прокси логирует стек глубиной 10(ну мне просто не надо больше обычно) и основные регистры. Причем логируются значения стека и регистров как до вызова функции, так и после. + если значение в регистре или на стеке указатель(ну сами понимаете, проверяю я это попыткой считать по указателю что-либо) то логируется как значение, так и то, что по указателю было(10000 байт по дефолту).

Когда приложение выгружается прокси либа создает лог файл где вы можите найти какие функции какой либы вызывались и с какими параметрами.

Проект ужасно сырой и в нем если куча недочетов о которых я и сам знаю. Но поскольку мне самому кроме этого ничего было не нужно я и остановил развитие. Но не пужайтесь — я использовал в довольно сложных приложениях, поэтому думаю подойдет и вам.

Работает так:
1)брем либу(я взяд для теста CLI svn сборку slik и ее либу для обработки CLI) SlikSvn-svn_client-1.dll
2)открываем make_dump.bat и правим в этом файле путь к бинаризам вижуала. Я юзаю 2003 для этого. Можите любой другой студией собирать. У меня и 2008 строит. Просто батники под себя подстройте.
3) на выходе получится SlikSvn-svn_client-1.dll.txt . это файл с описанием функций которые экспортируе ваша либа. Этот файл то проект и парсирует
4) далее открываем make_proxy_dll.bat
proxydll_creator.exe надо построить из приаттаченного проета.
1-й параметр это имя той либы поторую мы будем эмулировать
2-й имя файла экспорта с предыдущего шага.
3-й оставьте __stdcall. Фиг его знает зачем его ввел автор да и я его не использую. забыл удалить.
4-й имя файла в который вы переименуете исходную длл-ку
5-й имя исходника на с++ который сгенерит тул
6-й имя деф файла для компилярора о котором ниже

на выходе после этого шага имеем файлы с названиями из 4-го и 5-го параметров.

5) открываем make_dll.bat, фиксим и запускаем.
на выходе тут у нас SlikSvn-svn_client-1.dll. Ее мы копируем в D:\Program Files\SlikSvn\bin\ и выполняем svn info например. после этого в текущей директории находим файл SlikSvn-svn_client-1.cpp и смотрим с каким параметрами что вызывалось.
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.