Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delay-Loaded Imports (DLLs) 
:(
    Опции темы
stab
  Дата 6.3.2004, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Насколько я понимаю такие библиотеки загружаются по требованию с помошью LoadLibrary(Ex), далее используется GetProcAddress, но по моим наблюдениям GetProcAddress не вызывается, возможно я ошибаюсь. Как вообще работает этот механизм? Каким образом Dependency Walker (тулса из SDK) показывает информацию о Delay-Loaded DLLs, ведь они не записываются в импорты? Не сканирует же он весь файл на наличие какой либо сигнатуры...


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
sergejzr
Дата 6.3.2004, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



А для чего они нужны?

Это сообщение отредактировал(а) sergej.z - 6.3.2004, 22:36


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
stab
Дата 6.3.2004, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Я пытаюсь разобраться во встроенной в линкер VC поддержке, как ей пользоваться знаю. Не могу понять каким образом Dependency Walker выводит список этих DLL.

Цитата

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/vccore/html/vcconSpecifyingDLLsForDelayLoading.htm

Visual C++ Concepts: Building a C/C++ Program  

Specifying DLLs to Delay LoadSee Also
Linker Support for Delay-Loaded DLLs
You can specify which DLLs to delay load with the /delayload:dllname linker option. If you do not plan to use your own version of a helper function, you must also link your program with Delayimp.lib.

The following is a simple example of delay loading a DLL:

// cl t.cpp user32.lib delayimp.lib  /link /DELAYLOAD:user32.dll
#include <windows.h>
// uncomment these lines to remove .libs from command line
// #pragma comment(lib, "delayimp")
// #pragma comment(lib, "user32")

int main()
{
   // user32.dll will load at this point
   MessageBox(NULL, "Hello", "Hello", MB_OK);
}
Build the DEBUG version of the project. Step through the code using the debugger and you will notice that user32.dll is loaded only when you make the call to MessageBox.

See Also
Linker Support for Delay-Loaded DLLs



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 6.3.2004, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



хм, понятно почему не вызывается GetProcAddress:

Цитата

The default linker behavior is to create a bindable import address table for the delay-loaded DLL. If the DLL is bound, the helper function will attempt to use the bound information instead of calling GetProcAddress on each of the referenced imports. If either the timestamp or the preferred address do not match those of the loaded DLL, the helper function will assume the bound import address table is out of date and will proceed as if it does not exist.



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 6.3.2004, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



отбой, решение найдено:

"...\Microsoft Visual Studio .NET 2003\Vc7\include\delayhlp.cpp"


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Fantasist
Дата 8.3.2004, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



А прокомментировать можно? А то с первого взгляда понятно не стало.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
stab
Дата 10.3.2004, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Оказывается есть специальная таблица импорта для библиотек загружаемых по требованию. Что интересно и печально в документации по PE формату ни слова об этом (или я не там искал, может версия у меня древняя). Так вот в delayimp.h и delayhlp.cpp как раз таки можно нарыть описания структур и понять методику работы. В MSDN отрывочная информация имеется, при желании разобраться можно.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.