Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2013, 12:35   #1
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию Порядок загрузки DLL для исполняемого файла

Интересует,как можно изменить этот порядок.Т.е. все DLL имеют одинаковый базовый адрес 10000000, но загружаются в строго определенной последовательности и размещаются в памяти исходя из соображений Wndows.
Есть какая-то структура,отвечающая за это? И можно ли изменить данный порядок в уже откомпилированном файле
calypso вне форума Ответить с цитированием
Старый 19.02.2013, 14:39   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Хороший вопрос...
Измените порядок указывания import библиотек в параметрах линкера.
По крайней мере у меня это повлияло на результат dumpbin.exe -imports
Это повлияет только на DLL которые нужны вам, они в свою очередь могут грузить другие библиотеки, т.е. нужный вам порядок может быть не соблюден.
waleri вне форума Ответить с цитированием
Старый 19.02.2013, 17:57   #3
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Появилась такая идея: написать лоадер или заинжектить библиотеку, которая загрузит нужные DLL по нужным адресам (LoadLibraryEx это вроде умеет делать),а дальше сделать перехват функции LoadLibrary и проверять,если такая DLL уже есть в памяти то вернуть TRUE и ничего не делать,а если нет - то выполнить обычную LoadLibrary. Немного поясню что я пытаюсь сделать:
у меня есть чужой exe-файл, в котором я хочу сменить адреса загрузки DLL и их порядок следования в памяти;
В случае с лоадером открывать файл можно через CreateProcess но видимо без инжекта здесь не обойтись все равно
calypso вне форума Ответить с цитированием
Старый 19.02.2013, 21:40   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

CreateProcess загрузит все DLL процесса.
Зачем нужно менять адреса DLL и их порядок следования в памяти?
waleri вне форума Ответить с цитированием
Старый 19.02.2013, 23:56   #5
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Цитата:
Зачем нужно менять адреса DLL и их порядок следования в памяти?
Для получения работоспособного файла после снятия упаковщика.Как работает эта технология: предположим у нас есть оригинальный файл progra.exe и она использует library.dll ,которая загружается по адресу 00340000. В процессе работы прога обращается к функции func1 из этой dll ,вместо того чтобы вызвать её через таблицу импортируемых функций, упаковщик вызывает процедуру по адресу 00342570 (к примеру).Когда наша library.dll съедет на другой адрес,то естественно ничего работать не будет т.е. это эквивалентно использованию библиотек с фиксированной базой (ключ /FIXED при компиляции)
calypso вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить порядок загрузки форм Lidiya585 Windows Forms 0 30.11.2012 17:15
Экспорт функции из DLL для дальнейшей статической загрузки в Delphi The SCS Общие вопросы C/C++ 1 01.07.2012 18:28
Сменил порядок загрузки винтов kzld Операционные системы общие вопросы 2 04.11.2011 19:37
Возможно ли в Windows XP изменять порядок загрузки программ в автозагрузке? Лукманов Александр Windows 1 22.03.2011 00:11
Минимальное приложение для загрузки файла на FTP Gambler Работа с сетью в Delphi 6 29.01.2008 22:58