![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GetProcAddress
френк © (2005-09-21 22:18:00)Указатель на функцию DLL, который возвращает GetProcAddress является постоянным для конкретной DLL? или он может измениться после освобождения модуля и при повторной его загрузке?
Знаю, что туплю, наверняка. Но прошу вас - поясните.
Poirot (2005-09-24 15:36:00) [1]Скажу по секрету страшную тайну - адрес абсолютный может, а вот относительный нет:)
А базовый адрес относительно которого переводятся относительные в абсолютные он есть как раз HMODULE который возвращает таки LoadLibrary :) Вот вам и ответ:)
Полагаясь на то, что поведение загрузчика не отличается разнообразием то что можно таки и не вызывать повторно GetProcAddress ^)
френк (2005-09-23 21:19:00) [2]теперь все понятно. спасибо всем.
относительно [5] - спросил просто из спортивного интереса )
begin...end (2005-09-23 14:15:00) [3]> френк (21.09.05 22:18)
> Указатель на функцию DLL, который возвращает GetProcAddress
> является постоянным для конкретной DLL? или он может измениться
> после освобождения модуля и при повторной его загрузке?
В общем случае -- может измениться. В частном случае -- когда DLL скомпонована с указанием нужного базового адреса загрузки и запретом загрузки по альтернативным адресам -- не может измениться, но при этом вполне вероятна ситуация, когда DLL не загрузится совсем, т.к. нужная область АП процесса может быть уже занята.
evvcom (2005-09-23 13:56:00) [4]а лучше ответь на [5]
evvcom (2005-09-23 13:55:00) [5]
> требуется ли все-таки рефрешить указатели, если небыло других
> вызовов
Откуда ты знаешь были или нет другие вызовы? Если ты ничего не подгружаешь, это еще не значит, что и система ничего не подгружает. Кроме того, имеется куча программ, которые вешают глобальные хуки и внедряют в адресные пространства чужих процессов свои dll. Ты об этом можешь даже не догадываться, но это факт. Поэтому, если тебя не раздражают сообщения Access Violation, то можешь и не рефрешить указатели.
isasa (2005-09-23 13:41:00) [6]Если указатель нужен, зачем выгружать DLL ????
френк (2005-09-23 13:38:00) [7]но если не было другого LoadLibrary ? требуется ли все-таки рефрешить указатели, если небыло других вызовов ? простите, возможно, я зря так привезался с этим )
evvcom (2005-09-22 09:24:00) [8]После FreeLibrary может произойти Load другой Library по тем же адресам и последующий Load интересующей Library загрузит ее уже по другим адресам. Отсюда и смена адреса.
френк (2005-09-21 22:26:00) [9]спасибо, вы меня уверили )
Anton_K (2005-09-21 22:22:00) [10]Может измениться.