Загрузить библиотеку из другой DLL - PullRequest
4 голосов
/ 25 апреля 2011

Путь поиска DLL, как описано в MSDN :

  1. Каталог, в котором находится исполняемый модуль для текущего процесса.
  2. Текущийкаталог.
  3. Системный каталог Windows.Функция GetSystemDirectory извлекает путь к этому каталогу.
  4. Каталог Windows.Функция GetWindowsDirectory извлекает путь к этому каталогу.
  5. Каталоги, перечисленные в переменной среды PATH.

Что вызывает следующие сомнения:

Предположим, у меня естьисполняемый файл в некотором каталоге, скажем: c:\execdir\myexe.exe, и он загружает DLL, найденную в PATH и расположенную в c:\dlldir\mydll.dll.Теперь предположим, что mydll.dll пытается загрузить другую DLL с LoadLibrary.Какой каталог будет просматриваться первым - c:\dlldir или c:\execdir?

Я думаю, что приведенные выше правила поиска говорят, что это будет c:\execdir, потому что это якобы "каталог, где исполняемый модуль длятекущий процесс находится ", но было бы неплохо получить подтверждение из другого источника.

РЕДАКТИРОВАТЬ: Кроме того, c:\dlldir\ смотрел вообще ?В конце концов, это ни то, где находится .exe, ни «текущий каталог» (если это подразумевается в общем смысле).

PS Меня интересуют как Windows XP, так и 7.

1 Ответ

4 голосов
/ 25 апреля 2011

Да, это сначала исполняемый каталог, и было понято , это может привести к уязвимости безопасности при определенных обстоятельствах. На этой странице есть рекомендации, чтобы гарантировать, что ваше приложение не скомпрометировано с помощью этого механизма.

...