Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

две DLL по одному адресу

1.9K
23 июня 2006 года
disasm
232 / / 06.02.2006
Как в Windows по одному адресу в адресном пространстве процесса могут находится две разные DLL? Как это возможно?

Я, например, понимаю организацию .so библиотек в UNIX, а вот организация библиотек в Windows как-то не понятна... Можете разъяснить?
3
23 июня 2006 года
Green
4.8K / / 20.01.2000
А с чего ты вязл, что они грузятся по одному адресу? ;)
354
23 июня 2006 года
ШпиЁн
468 / / 19.02.2006
Мне всегда казалось, что адреса назначаются системой при загрузке этих библиотек, и не могут пересекаться... Периодически следует включать здравый смысл... банально: например, ты же не можешь одной переменной присвоить ОДНОВРЕМЕННО два разных значения?
Может, ты имел в виду ImageBase? это у всех одинаково - 0x10000000.

Почитать про Dll очень подробно и предельно понятно можно у Джеффри Рихтера, "Часть IV: Динамически подключаемые библиотеки.", раздел - "Модификация базовых адресов модулей" там описывается именно то, что ты хотел узнать :о)

В сети эта книжка есть - советую прочесть! многие вопросы отпадут сами собой после этого :о)
534
23 июня 2006 года
HarryAxe
448 / / 19.01.2006
[QUOTE=disasm]Как в Windows по одному адресу в адресном пространстве процесса могут находится две разные DLL? Как это возможно?[/QUOTE] У всякой библиотеки в заголовке значится базовый адрес (ImageBase), который, при желании, можно изменить. Если библиотека не может быть загружена по данному адресу, она загружается в свободный участок памяти, а все адреса в заголовках секций PE пересчитываются. ImageBase - всего лишь предпочтительный адрес загрузки. Исключение составляют системные библиотеки, во всех программах каждая из них загружается по одному и тому же адресу.
1.9K
24 июня 2006 года
disasm
232 / / 06.02.2006
Идея понятна, но как тогда собрать библиотеку с возможностью динамического изменения адреса, ведь код библиотеки обращается к своим данным напрямую, а не через GOT например.. Как это реализовать на ассемлере я знаю, а вот как на C/C++ (например с помощью компилятора MSVCPP) это сделать?
3
24 июня 2006 года
Green
4.8K / / 20.01.2000
Не волнуйся, компилятор и линкер сделают это за тебя.
1.9K
24 июня 2006 года
disasm
232 / / 06.02.2006
А вот в отладчике (IDA) этого не видно...
10
24 июня 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=disasm]А вот в отладчике (IDA) этого не видно...[/QUOTE]
Блин, ну проще простого ведь. Не знаю, как в IDA - не пользовался, но в Process Explorer Руссиновича все прекрасно видно.

Выбираешь любое приложение, нажимаешь на кнопку DLL и любуешься. Возможно, придется включить отображение колонок "Image Base" и "Base", если не включены по умолчанию. Для приложения с плагинами, например, Far, картина получается весьма интересной.
3
25 июня 2006 года
Green
4.8K / / 20.01.2000
А IDA - это разве отладчик?
Мне казалось, что это дизассемблер.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог