Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неявная загрузка библиотеки, Функция DllMain 
:(
    Опции темы
Router
Дата 26.3.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

PM MAIL   Вверх
azesmcar
Дата 26.3.2010, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 5
Всего: 211



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

тут есть подробные ответы на все твои вопросы.
PM   Вверх
bra1ny
Дата 26.3.2010, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 3



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

Это сообщение отредактировал(а) bra1ny - 26.3.2010, 23:05
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
jonie
Дата 27.3.2010, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



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


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Router
Дата 27.3.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хорошо, ну все же меня интересует системы 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 поставить бесконечный цикл,
какой поток будет выполнять этот самый цикл ?

PM MAIL   Вверх
bra1ny
Дата 27.3.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 3



Цитата

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

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

Цитата

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

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



Это сообщение отредактировал(а) bra1ny - 27.3.2010, 15:26
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
Router
Дата 27.3.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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