Функция перезаписи в другой dll без правок в основной dll - PullRequest
1 голос
/ 10 июля 2009

Эта игра, для которой я создаю сценарии, использует основную библиотеку DLL, в которой мы пишем наши сценарии (творчески называемые "scripts.dll"

Этот файл scripts.dll на стороне сервера загружает другие плагины (в том числе .dll).

Вопрос: Мне нужно переопределить существующую функцию в scripts.dll, например, в pluginA.dll, туда, где не вызывается та, что в scripts.dll.

У меня была идея, возможно, получить адрес адреса в scripts.dll и перезаписать его (memcpy ()?) Адресом моей новой функции.

Да, и функции называются одинаково.

Ответы [ 2 ]

2 голосов
/ 10 июля 2009

Это довольно обширная тема, требующая многословного ответа, но, к счастью, она была подробно рассмотрена в другом месте. Эта статья CodeProject является довольно приличным чтением по теме - она ​​объясняет и теорию, и то, как использовать удобную библиотеку Microsoft Detours , чтобы сделать это очень легко.

1 голос
/ 10 июля 2009

Сначала я бы попытался настроить вызывающую программу так, чтобы она получала указатель на конкретную функцию от pluginA.dll, а не от scripts.dll через GetProcAddress.

Если это невозможно, я бы переписал начало старой функции инструкцией перехода к новой функции. Инструкция по переходу на x86 - "E9 XX XX XX XX"; обратите внимание, что целевой адрес относительно ПК после перехода. Если у вас нет x86, машинный код, конечно, будет выглядеть иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...