powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Заменить несколько функций в dll на свои
15 сообщений из 15, страница 1 из 1
Заменить несколько функций в dll на свои
    #37355269
Есть приложение использующее DLL в которой 200 доступных функций. На приложение и dll нету исходных кодов.
Необходимо написать промежуточный обработчик для входных данных для нескольких функций. Как это легче всего сделать?
Т.е. по сути как заменить несколько функций в dll на свои?
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #37355275
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
функций в dllЕсть приложение использующее DLL в которой 200 доступных функций. На приложение и dll нету исходных кодов.
Необходимо написать промежуточный обработчик для входных данных для нескольких функций. Как это легче всего сделать?
Т.е. по сути как заменить несколько функций в dll на свои?
см. Detours
Если правильно помню, он умеет в EXE добавлять хуки на вызовы произвольных ф-й DLL.
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #37355286
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
функций в dllЕсть приложение использующее DLL в которой 200 доступных функций. На приложение и dll нету исходных кодов.
Необходимо написать промежуточный обработчик для входных данных для нескольких функций. Как это легче всего сделать?
Т.е. по сути как заменить несколько функций в dll на свои?Прокси поможет:
a) переименовать оригинальную dll,
б) сделать свою dll со старым именем и в ней:
в) свои функции на подмену
г) простой вызов всех тех функций которые подменять не нужно (что-то в духе int foo_new(int a, int b) {return foo(a,b);})
д) В def для своей dll сделать переименование функций (foo_new -> foo)
все.
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #37355614
majestic-mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl, последний подход предполагает что нужно разработать библиотеку экспортирующую 200 функций - при этом, которая в начале своей инициализации должна корректно настроить импорт заглушек из исходной библиотеки - а это тоже 200 функций - и если речь идёт о переопределении 2-3 функций из общего набора - этот подход немного "тяжеловат"... это как из пушки по микробам...

Detour - хорошая библиотека, но к сожалению её поддержка уже прекращена и последняя система в которой она ещё может быть использована - WinXP и серверная ОС Win2k3... Т.е. в WinVista и Win7 - её полностью корректная работа не гарантируется самой компанией Microsoft. Я не знаю какие там могут быть сложности с совместимостью - наверное не попробуешь, не узнаешь... Да и просто - Express версия ещё вроде бы бесплатна, а за Pro-версию придётся ещё и деньги платить... но отличия Pro от Express - заключаются в поддержке ARM процессоров и 64-битной архитектуры (что наверное для Вас не является принципиальным).

В общем - что касается вопроса - в любом случае тут придётся использовать хитрые хакерские приёмы - писать свою Startup-мини программку, которая будет загружать исходный процесс (запускать exe программы), загружать в его адресное пространство вспомогательную библиотеку, реализующую модифицированные функции... и в дальнейшем - если линковка с дорабатываемой библиотекой осуществлялась статически (через Lib-файл) - то править таблицу импорта в exe (касательно дорабатываемых функций) для вызова своего кода. Если загрузка дорабатываемой библиотеки осуществляется динамически - тогда нужно будет править таблицу экспорта дорабатываемой DLL - так же устанавливая в ней "трамплин" на свои вызовы где это необходимо. Разумеется оба подхода предполагают что те функции которые дорабатываются - известны хотя бы в плане своих сигнатур (количество и типы передаваемых им параметров, а так же спецификация их вызова - как передаются параметры (через регистры, через стек - в прямом или обратном порядке и т.д.). Что уже по своему характеру - скрывает в себе возможные проблемы с совместимостью и всем прочим. В общем - использование каких либо механизмов перехвата API - которые в достаточной степени привязаны к конкретой версии ОС и являются достаточно платформенно зависимым механизмом.

Есть так же вариант патчинга исходного exe файла c перехватом точки входа в приложение - и предварительной настройкой импортируемых функций (только для линковки через LIB-файл). В этом случае код, дорабатывающий некоторые функции может быть прикреплён к исходному exe в отдельной его секции с соответствующими правами доступа. Но так же в нём - больше алхимии, чем науки... обычно в такой ситуации уже нужно своё приложение писать, если нет возможности доработки исходного.
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #37355780
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
majestic-mike,

в жизни приходилось пользоваться разными методами из описанных тобой, но проще и безгеморнее то что предложил White Owl а 200 их или 1000 не важно - за 10 минут можно написать программку которая сгенерит хеадер для заглушек по экспорту длл
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #37355836
majestic-mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iskatelsql,

Ну - на вкус и цвет... как говорится ;)
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #37355966
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
majestic-mikeDetour - хорошая библиотека, но к сожалению её поддержка уже прекращена и последняя система в которой она ещё может быть использована - WinXP и серверная ОС Win2k3... Т.е. в WinVista и Win7 - её полностью корректная работа не гарантируется самой компанией Microsoft. Я не знаю какие там могут быть сложности с совместимостью - наверное не попробуешь, не узнаешь...
Там проблема только с DEP .
Если отключить флаг DEP в EXE (/NXCOMPAT:NO) то все работает, включая win7
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Заменить несколько функций в dll на свои
    #39896557
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

здравствуйте, у меня аналогичная задача, только некоторые функции не подменить надо, а расширить. Подход, который Вы описываете, мне подходит. В теории я понимаю все, что Вы написали, но как только доходит до практической реализации - полный ступор. Можете показать на каком-нибудь простом примере, как это сделать?
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #39896562
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
доходит до практической реализации - полный ступор.
совет - рассказывайте по шагам что вы делаете.
Среда и комп перед вами?
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #39896569
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

- Итак, у меня vs2019, c++
- от исходной dll в наличии h, lib и dll
- подключаю статически (добавляю в проект h-файл и связываю с lib-файлом)
- создаю новые h и cpp для объявления функций и реализации
- в h-файл прописываю свои названия функций, чтобы не было конфликтов?
- в cpp-файле пишу реализацию всех своих функций, вызывая в теле соответствующие функции родной dll

- не понимаю, как быть с enum, которых в исходном h-файле много
- не понимаю, как "В def для своей dll сделать переименование функций (foo_new -> foo)"
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #39896571
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills,
Вместо их ехе, создайте свою и вызовите функцию Х в их длл.
Какую вызвать выберите сами и ее сюда.
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #39896706
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illsМожете показать на каком-нибудь простом примере, как это сделать?

Выкидываете "их" библиотеку полностью. Создаёте с нуля свою, которая называется так же как
старая и экспортирует функции с теми же именами, что и старая. Заставляете эти функции
делать то же самое, что и старые, только чуть-чуть больше в нужную вам сторону. Всё,
телемаркет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #39896961
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
PetroNotC Sharp,

- Итак, у меня vs2019, c++
- от исходной dll в наличии h, lib и dll
- подключаю статически (добавляю в проект h-файл и связываю с lib-файлом)
- создаю новые h и cpp для объявления функций и реализации
- в h-файл прописываю свои названия функций, чтобы не было конфликтов?
- в cpp-файле пишу реализацию всех своих функций, вызывая в теле соответствующие функции родной dll

- не понимаю, как быть с enum, которых в исходном h-файле много
- не понимаю, как "В def для своей dll сделать переименование функций (foo_new -> foo)"


Всё не так...
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #39896967
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Всё не так...
он уже попробовал на одной функции и отказался).
Через год еще кто нибудь подымет этот топик.
...
Рейтинг: 0 / 0
Заменить несколько функций в dll на свои
    #39897027
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Заменить несколько функций в dll на свои
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]