После дополнительных исследований я обнаружил, что некоторые библиотеки DLL, такие как kernel32.dll или user32.dll, обычно не могут быть переопределены, потому что они являются известными библиотеками DLL. В Windows есть список таких часто используемых библиотек DLL, которые автоматически по умолчанию для версий System32, а не по умолчанию, когда сначала проверяется папка приложения.
Если вы хотите обойти это, например, создать прокси DLL, вам необходимо включить два файла в каталог приложения: applicationName.exe.local и applicationName.exe.manifest em>, где applicationName - имя вашего EXE-файла.
Это должно быть содержимое файла манифеста:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="redirector" type="win32" />
<file name="kernel32.dll" />
</assembly>
Тег assemblyIdentity предназначен для предоставления информации о номере версии и имени вашего приложения, но мы можем просто игнорировать его. Важной частью является тег файла, который указывает файл для локальной загрузки. Замените kernel32.dll
библиотекой DLL, которую нужно загрузить локально.
Кроме того, Windows обновляет содержимое файлов .manifest только при перезапуске или при изменении файла EXE, поэтому вы можете просто открыть файл EXE в каком-нибудь шестнадцатеричном редакторе, стереть первый символ, добавить его обратно и сохранить ... и т. Д. ., чтобы обновить файл манифеста. Сделайте это, если ваш файл манифеста игнорируется.
- В Windows 2000 и ниже добавления файла .local будет достаточно, чтобы убедить его загрузить локальную версию kernel32.dll.
- В Windows XP и более поздних версиях вам необходимо использовать файл .manifest.
- Приложение может иметь встроенный файл .manifest. В этом случае вы можете удалить ресурс с помощью такого инструмента, как Stud_PE.
person
tomysshadow
schedule
30.03.2017
known dll
поддержка в Windows. - person josh poley   schedule 30.03.2017