Если ваше приложение уже существует и не может быть изменено , тогда
вы можете написать прокси dll.Т.е. создайте свою собственную dll с именем kernel32.dll, поместите ее в каталог приложения и заставьте dll-прокси обеспечить все функции приложения.Конечно, ваша пользовательская dll должна перенаправлять все вызовы, которые она не переопределяет, на оригинальный kernel32.dll - путем загрузки оригинальной dll с помощью LoadLibrary.
Поскольку LoadLibrary предоставляется kernel32, и вы используете прокси-сервер kernel32, скорее всего, выПридется назвать ваш прокси dll kernel33.dll и исправить оригинальный exe и заставить его загружать kernel33 вместо kernel32.
Все дело в боли, и чтобы сделать это успешно, вы должны быть хотя бы знакомы с cli(интерфейс командной строки - cmd.exe на windows) и утилита dumpbin. Это устаревшее руководство может помочь вам начать работу.
В качестве альтернативы вы можете попытаться использовать инъекцию DLL или аналогичные методы.Есть также "Detours" библиотека, которую я не использовал (не знаю, зачем мне это беспокоить, если я могу создать dll-прокси).
, если у вас естьдоступ к исходному коду вашего приложения , и только для определенной части программы требуется другая подпрограмма ...
Затем просто создайте собственную подпрограмму с любым именем, которое вы хотите (скажем, myLoadLibrary
).Затем создайте заголовок, который использует #define
для переопределения вашей рутины.Т.е. что-то вроде #define LoadLibrary myLoadLibrary
.Включите этот заголовок в каждый файл, где вам нужно переопределить, и убедитесь, что он включен после <windows.h>
.