Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.20;
Скачать: CL | DM;

Вниз

Всегда ли BaseAddr = ImageBase для user32.dll ?   Найти похожие ветки 

 
Сергей М. ©   (2006-04-26 13:33) [0]

Иными словами, всегда ли система выполняет загрузку этого модуля по одному и тому же (фиксированному) адресу, подобно тому как это выглядит для kernel32.dll ? Есть ли здесь какое-либо правило и исключения из него ?

Спасибо.


 
GrayFace ©   (2006-04-26 13:54) [1]

Проверил. Всегда. Так же, не релокается ntdll. Эти 3 библиотеки - исключения из правила. Может есть и другие.


 
Сергей М. ©   (2006-04-26 14:05) [2]


> Эти 3 библиотеки - исключения из правила


Не уверен.


 
Игорь Шевченко ©   (2006-04-26 15:22) [3]


> Иными словами, всегда ли система выполняет загрузку этого
> модуля по одному и тому же (фиксированному) адресу, подобно
> тому как это выглядит для kernel32.dll ?


При попытке загрузить приложение в область адресов, которую занимает user32.dll, системой выдается аналогичное для kernel32.dll сообщение.

Система Windows 2000 SP4.

А может быть, known dlls вообще не перемещаются ?


 
Сергей М. ©   (2006-04-26 15:51) [4]


> может быть, known dlls вообще не перемещаются ?


Мне, Игорь, самому хотелось бы это знать ..

Я тоже наблюдаю (W2k) во всех процессах (в т.ч. - "симстемных") размещение user32 по одному и тому же адресу ... но, думаю, это вполне м.б. просто фичей большинства известных линкеров.


 
Игорь Шевченко ©   (2006-04-26 16:17) [5]

Сергей М. ©   (26.04.06 15:51) [4]

А ты не пробовал влезть в адреса других known dlls, на которые тем более, есть bound imports ? Я не уверен в правильности своих рассуждений, но в поисках в гугле натыкался на фразу "Do not ever rebase known Dlls".


 
Игорь Шевченко ©   (2006-04-26 16:24) [6]

Сергей М. ©   (26.04.06 15:51) [4]

Посмотрев в известном тебе месте, ты увидишь, что known dlls загрузчик не перемещает, считая это за фатальную ошибку.


 
Сергей М. ©   (2006-04-26 17:13) [7]


> Игорь Шевченко ©   (26.04.06 16:24) [6]


Как ты считаешь - передав в "чужой" процесс (скажем, winlogon.exe для конкретности) адреса точек входа в интересующие меня вызовы в составе user32 в контексте моего (текущегго) процесса, я поимею геморрой ? Или я могу быть уверенным в том что эти адреса будут актуальны и в упомянутом АП ?


 
Игорь Шевченко ©   (2006-04-26 17:28) [8]

Сергей М. ©   (26.04.06 17:13) [7]

Насчет уверенности я стопроцентно не могу гарантировать, естестественно, но если принимать во внимание [6], то я бы был уверен, что user32.dll грузится по одному и тому же адресу. Естественно, этот адрес зависит от версии системы и сервис-пака.


 
Сергей М. ©   (2006-04-27 10:46) [9]


> Игорь Шевченко ©   (26.04.06 17:28) [8]


Спасибо.

То же самое, очевидно, касается как минимум еще и ntdll.dll и msvcrt.dll, что резко облегчает жизнь)


 
Игорь Шевченко ©   (2006-04-27 11:33) [10]

Сергей М. ©   (27.04.06 10:46) [9]

msvcrt.dll в списке KnownDlls нету, так что я не был бы таким уверенным. А GetModuleHandleEx не может тебе помочь ?


 
Сергей М. ©   (2006-04-27 11:51) [11]


> Игорь Шевченко ©   (27.04.06 11:33) [10]


Как вариант она мной рассматривалась, но (цитата из msdn)

Client  Requires Windows Vista or Windows XP.
Server  Requires Windows Server "Longhorn" or Windows Server 2003.


а мне нужно обеспечить совместимость со всеми NT-based ОС


 
Игорь Шевченко ©   (2006-04-27 12:20) [12]

Сергей М. ©   (27.04.06 11:51) [11]

Это я перепутал имя функции, прошу прощения. Мне казалось, что она возвращает базовый адрес модуля в чужом процессе. В крайнем случае, ее можно написать, анализируя таблицы загрузчика в TEB



Страницы: 1 вся ветка

Текущий архив: 2006.08.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.093 c
15-1153473263
otadoiu
2006-07-21 13:14
2006.08.20
QIP...


3-1150199874
DVM
2006-06-13 15:57
2006.08.20
Сжатие базы Access и связанные таблицы


15-1153644541
Каг Дила?
2006-07-23 12:49
2006.08.20
Сетевая игра


11-1131533055
Ефременко Алексей
2005-11-09 13:44
2006.08.20
Модули, требующиеся для компиляции mirror.pas


2-1154348555
Neket
2006-07-31 16:22
2006.08.20
IdSNMP1