Как проверить счетчик ссылок dll? Как узнать, где была загружена dll?

Как вы знаете, если при вызове LoadLibrary указан модуль DLL, уже сопоставленный с адресным пространством вызывающего процесса, функция просто возвращает дескриптор библиотеки DLL и увеличивает счетчик ссылок модуля.

Где-то мне нужно получить счетчик ссылок на dll. Как получить подсчет ссылок DLL? Как узнать где была загружена dll? Спасибо.

12
задан ldlchina 24 August 2010 в 06:33
поделиться

4 ответа

Я погуглил и нашел эту статью , которая утверждает, что дает ответ. Извините, я не мог быть более полезным:

5
ответ дан 2 December 2019 в 21:22
поделиться

Если это не программный способ (спасибо C.Johnson за то, что дал такую перспективу), WinDBG может быть полезен

http://windbg.info/doc/1-common-cmds.html#10_modules

Посмотрите на !dll и их варианты.

!dll - все загруженные модули с load count

EDIT 2:

Если вы хотите узнать, откуда загружаются все DLL из процесса, есть два способа:

a. Посмотрите на команду

"bu kernel32!LoadLibraryExW ";as /mu ${/v:MyAlias} poi(@esp+4); .if ( $spat( \"${MyAlias}\", \"MYDLL\" ) != 0 ) { kn; } .else { g }" "

в вышеуказанном URL

б. Запустите процесс под WinDBG. Debug->Even Filter и выберите "Load Module" и установите значение "Enabled" в разделе "Execution". В разделе "Продолжить" установите значение "Не обрабатывается".

Одно из этого должно вам точно помочь.

5
ответ дан 2 December 2019 в 21:22
поделиться

На самом деле эта информация недоступна через общедоступный API. Каков ваш сценарий? Запуск AppVerifier выявит любые ошибки, которые вы допустили с дескрипторами модулей (или любых других).

0
ответ дан 2 December 2019 в 21:22
поделиться

Я не уверен, что вы полностью понимаете, как должна работать LoadLibrary/FreeLibrary. Вы вызываете FreeLibrary, когда закончите с ним, и это уменьшит счетчик ссылок, который был увеличен при его загрузке. Если какая-то другая часть вашего процесса все еще использует его, это, вероятно, не ваша забота.

Счетчик ссылок может сказать вам, сколько раз он был «загружен», но не поможет выяснить, кто его загрузил.

1
ответ дан 2 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: