Как узнать из какого модуля ее загрузили DLL
От: BKol  
Дата: 14.12.05 09:03
Оценка:
Как узнать внутри метода dll из какого модуля ее загрузили.
Из exe или из какой-то другой dll.

Для примера, ситуация такая:
exe загружает COM объект (dll).
этот COM объект загружает dll.
как в этой (последней) dll узнать путь и имя к загрузившей ее dll.
Re: Как узнать из какого модуля ее загрузили DLL
От: Alex Fedotov США  
Дата: 14.12.05 09:05
Оценка: +1
Здравствуйте, BKol, Вы писали:

BK>Как узнать внутри метода dll из какого модуля ее загрузили.

BK>Из exe или из какой-то другой dll.

Практически никак, разве что раскрутить стек в DllMain и посмотреть, кто вызвал LoadLibrary[Ex]. Интересно, зачем такое может понадобиться?
-- Alex Fedotov
Re[2]: Как узнать из какого модуля ее загрузили DLL
От: BKol  
Дата: 14.12.05 09:13
Оценка:
AF>Практически никак, разве что раскрутить стек в DllMain и посмотреть, кто вызвал LoadLibrary[Ex]. Интересно, зачем такое может понадобиться?
1. А где можно почитать как раскрутить стек?
2. Чтобы проверить, что DLL пытается использовать именно тот модуль
Re[3]: Как узнать из какого модуля ее загрузили DLL
От: gear nuke  
Дата: 14.12.05 19:34
Оценка:
Здравствуйте, BKol, Вы писали:

BK>1. А где можно почитать как раскрутить стек?


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

Можно попробовать сделать тестовый пример — exe, который делает LoadLybrary для dll, поставить точку останова в DllMain (__asm int 3) и посмотреть стэк в отладчике. Так можно будут узнать смещение от текущего значения esp, по которуму нужно проверять адрес. Но наверняка для разных версий ОС это смещение не будет одинаковым.

BK>2. Чтобы проверить, что DLL пытается использовать именно тот модуль


Если это делается с целью защиты, Вы получите дополнительный "бонус" — проблемы у легальных пользователей.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: Как узнать из какого модуля ее загрузили DLL
От: ak_miass Россия  
Дата: 15.12.05 06:54
Оценка:
Здравствуйте, BKol, Вы писали:
BK>2. Чтобы проверить, что DLL пытается использовать именно тот модуль

Чисто предложение. В "именно том" модуле непосредственно перед LoadLibrary создать поименованый мьютекс и убить его сразу после LoadLibrary. В DllMain проверить существование мьютекса.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.