![]() |
eXeL@B —› Вопросы новичков —› заплатка для DLL |
Посл.ответ | Сообщение |
|
Создано: 26 марта 2013 03:47 · Поправил: maxidromm · Личное сообщение · #1 Во-первых, привет всем! У меня есть вопрос. Возможно кто то знает, дайте направление. Есть DLL, там куча функций и зависимостей от других библиотек и проч. Надо - в сумме 5 функций надо перенаправить на мои. То есть, нужно следать "патч", заплатку, чтобы работало как нужно. Условия таковы, что другие функции библиотеки тоже вызывают эти 5. Исходники есть, но перекомпилировать не желательно по конкретным соображениям. Пишу проект VS на C++ (ANSI C в конечном итоге). В одной руке - 5 функций, в другой - DLL, надо слепить их вместе. Операции вроде /force:multiple не помогают (а очень хотелось бы - этот метод отлично работает для static libs). "Легальные" способы типа хитрых настроек линковщика не проходят (или я не знаю). Некрасивые методы типа деассемблирования - тоже неудобное решение (case specific). Какие есть еще варианты? Пример того что не работает: DLL: __declspec(dllexport) int f1(void) { return 1; } __declspec(dllexport) int f2(void) { return f1(); } Application: extern"C"{ int f1(void) { return 4; } extern int f2(void); } int _tmain(int argc, _TCHAR* argv[]) { int k; k = f1(); // will output 4 k = f2(); // will output 1 ... а мне надо чтобы f2() выдала 4. ![]() |
|
Создано: 26 марта 2013 04:39 · Личное сообщение · #2 |
|
Создано: 26 марта 2013 05:04 · Поправил: plutos · Личное сообщение · #3 Примерно как-то вот так: Code:
----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 26 марта 2013 06:00 · Поправил: maxidromm · Личное сообщение · #4 MasterSoft Деассемблирование - красивый метод, когда кодишь дома. Но что делать когда новая версия дллки выйдет? Для индустрии думаю не совсем годится (кто патчи выпускать будет?). Ссылку, конечно, посмотрю. Спасибо. PS: уже пробежался... надо время, там много интересного. plutos Спасибо, тоже попробую. Я тут нашел примерно похожее. В принципе, хороший вариант если статически цеплять к проекту и патчить "онлайн". http://software.intel.com/en-us/articles/intercepting-system-api-calls/ но... закодил. VirtualProtect вылетает со свистом stack overflow. хмм... думаю дальше. В целом - спасибо всем отписавшим. Основное направление я понял. ![]() |
|
Создано: 26 марта 2013 23:55 · Поправил: maxidromm · Личное сообщение · #5 |
|
Создано: 27 марта 2013 09:14 · Личное сообщение · #6 |
![]() |
eXeL@B —› Вопросы новичков —› заплатка для DLL |
Эта тема закрыта. Ответы больше не принимаются. |