Форум: "WinAPI";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизВсегда ли 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c