Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Неявная загрузка библиотеки


Автор: Router 26.3.2010, 19:50
Меня интересует этап создания процесса,
на котором рекурсивно загружаются все библиотеки из таблиц импорта.
 
Я понимаю это так:
- создается адресное пространство.
- проецируется исполняемый модуль (файл программы).
- загрузчик просматривает таблицу того или иного модуля.
- если какой-то библиотеки нет, то он ее проецирует в текущее адресное пространство.

А вопрос в том, как (кем и в контексте какого потока вызывается) и когда (до или после создания главного потока) происходит вызов главных функций этих библиотек?

Автор: azesmcar 26.3.2010, 20:25
Стоит почитать Джефри Рихтера.
http://wm-help.net/books-online/book/59464/59464-23.html#h1

тут есть подробные ответы на все твои вопросы.

Автор: bra1ny 26.3.2010, 22:53
KiThreadStartup->LdrInitializeThunk( она и загружает библиотеки и вызывает dllmain с DLL_PROCESS_ATTACH ).
Потом ( диспетчер APC ?) вызывает главную функцию потока. 

Автор: jonie 27.3.2010, 09:50
кстати, а в сорцах ядра винды (частично выложенных) нету процессов ?

Автор: Router 27.3.2010, 10:44
Хорошо, ну все же меня интересует системы Windows NT

Я сделал такой пример:
библиотека (module.dll) в DllMain открывает файл
в качестве доступа SharedMode я передаю 0

и (app.exe) приложения которое статически линкует module.dll
в app.exe первым делом открывается тот же файл с SharedMode = 0

в результате получилось что app.exe открывает его первым
(я даже ставил Sleep() в app.exe, и с ним app.exe открывает его первым )
а dll даже не подает признаков что не смогла открыть его.

В результате вопрос, а действительно ли в статически слинкованых dll вызываются DllMain?
И если все таки да, то что произойдет когда в DllMain поставить бесконечный цикл,
какой поток будет выполнять этот самый цикл ?

Автор: bra1ny 27.3.2010, 15:17
Цитата

кстати, а в сорцах ядра винды (частично выложенных) нету процессов ? 

каких процессов? если вы про подсистему , смотрите обычные сорцы ) 

Цитата

Хорошо, ну все же меня интересует системы Windows NT

А я вам про какую? Вот сейчас сверил с Руссиновичом , что вчера вам написал , я не ошибся. 


Автор: Router 27.3.2010, 16:19
Про windows NT это я просто подчеркнул, а то забыл сказать про это.
И все же хотелось, что бы вы прокомментировали мой второй пост, а то я запутался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)