|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
Есть приложение использующее DLL в которой 200 доступных функций. На приложение и dll нету исходных кодов. Необходимо написать промежуточный обработчик для входных данных для нескольких функций. Как это легче всего сделать? Т.е. по сути как заменить несколько функций в dll на свои? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 00:43 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
функций в dllЕсть приложение использующее DLL в которой 200 доступных функций. На приложение и dll нету исходных кодов. Необходимо написать промежуточный обработчик для входных данных для нескольких функций. Как это легче всего сделать? Т.е. по сути как заменить несколько функций в dll на свои? см. Detours Если правильно помню, он умеет в EXE добавлять хуки на вызовы произвольных ф-й DLL. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 00:49 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
функций в dllЕсть приложение использующее DLL в которой 200 доступных функций. На приложение и dll нету исходных кодов. Необходимо написать промежуточный обработчик для входных данных для нескольких функций. Как это легче всего сделать? Т.е. по сути как заменить несколько функций в dll на свои?Прокси поможет: a) переименовать оригинальную dll, б) сделать свою dll со старым именем и в ней: в) свои функции на подмену г) простой вызов всех тех функций которые подменять не нужно (что-то в духе int foo_new(int a, int b) {return foo(a,b);}) д) В def для своей dll сделать переименование функций (foo_new -> foo) все. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 01:15 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
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 в отдельной его секции с соответствующими правами доступа. Но так же в нём - больше алхимии, чем науки... обычно в такой ситуации уже нужно своё приложение писать, если нет возможности доработки исходного. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 11:27 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
majestic-mike, в жизни приходилось пользоваться разными методами из описанных тобой, но проще и безгеморнее то что предложил White Owl а 200 их или 1000 не важно - за 10 минут можно написать программку которая сгенерит хеадер для заглушек по экспорту длл ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 12:48 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
iskatelsql, Ну - на вкус и цвет... как говорится ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 13:14 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
majestic-mikeDetour - хорошая библиотека, но к сожалению её поддержка уже прекращена и последняя система в которой она ещё может быть использована - WinXP и серверная ОС Win2k3... Т.е. в WinVista и Win7 - её полностью корректная работа не гарантируется самой компанией Microsoft. Я не знаю какие там могут быть сложности с совместимостью - наверное не попробуешь, не узнаешь... Там проблема только с DEP . Если отключить флаг DEP в EXE (/NXCOMPAT:NO) то все работает, включая win7 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 14:27 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
White Owl, здравствуйте, у меня аналогичная задача, только некоторые функции не подменить надо, а расширить. Подход, который Вы описываете, мне подходит. В теории я понимаю все, что Вы написали, но как только доходит до практической реализации - полный ступор. Можете показать на каком-нибудь простом примере, как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:01 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
ills доходит до практической реализации - полный ступор. Среда и комп перед вами? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:16 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, - Итак, у меня vs2019, c++ - от исходной dll в наличии h, lib и dll - подключаю статически (добавляю в проект h-файл и связываю с lib-файлом) - создаю новые h и cpp для объявления функций и реализации - в h-файл прописываю свои названия функций, чтобы не было конфликтов? - в cpp-файле пишу реализацию всех своих функций, вызывая в теле соответствующие функции родной dll - не понимаю, как быть с enum, которых в исходном h-файле много - не понимаю, как "В def для своей dll сделать переименование функций (foo_new -> foo)" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:34 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
ills, Вместо их ехе, создайте свою и вызовите функцию Х в их длл. Какую вызвать выберите сами и ее сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:44 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
illsМожете показать на каком-нибудь простом примере, как это сделать? Выкидываете "их" библиотеку полностью. Создаёте с нуля свою, которая называется так же как старая и экспортирует функции с теми же именами, что и старая. Заставляете эти функции делать то же самое, что и старые, только чуть-чуть больше в нужную вам сторону. Всё, телемаркет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2019, 16:37 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
ills PetroNotC Sharp, - Итак, у меня vs2019, c++ - от исходной dll в наличии h, lib и dll - подключаю статически (добавляю в проект h-файл и связываю с lib-файлом) - создаю новые h и cpp для объявления функций и реализации - в h-файл прописываю свои названия функций, чтобы не было конфликтов? - в cpp-файле пишу реализацию всех своих функций, вызывая в теле соответствующие функции родной dll - не понимаю, как быть с enum, которых в исходном h-файле много - не понимаю, как "В def для своей dll сделать переименование функций (foo_new -> foo)" Всё не так... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 11:22 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
MasterZiv Всё не так... Через год еще кто нибудь подымет этот топик. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 11:39 |
|
Заменить несколько функций в dll на свои
|
|||
---|---|---|---|
#18+
Правку таблицы экспорта DLL предлагали уже? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 13:28 |
|
|
start [/forum/topic.php?fid=57&msg=39896961&tid=2017508]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 278ms |
total: | 402ms |
0 / 0 |