Как я могу установить / baseaddress на «хорошее» значение? - PullRequest
9 голосов
/ 08 октября 2008

У нас есть проект с множеством DLL-файлов, которые загружаются при запуске приложения. Базовые адреса файлов DLL перекрываются, поэтому образ памяти перемещается. Есть ли возможность присваивать базовые адреса автоматически или способ расчета «хорошего» базового адреса для каждого файла DLL?

Ответы [ 2 ]

7 голосов
/ 08 октября 2008

Вы можете использовать утилиту REBASE, которая поставляется с платформой SDK, и с Visual Studio, я думаю, установить базовые адреса целой связки DLLS, загруженной приложением

Вы предоставляете REBASE список библиотек DLL, составляющих вашу программу, не включая системные DLL, затем она выполняет фиктивную загрузку всех библиотек DLL и присваивает им новые базовые адреса.

Это может быть выполнено как часть заключительного шага сборки.

Есть статья доктора Доббса о перебазировании здесь и статья Microsoft о перебазировании в целом здесь

3 голосов
/ 08 октября 2008

Если вы распространяете библиотеки DLL, независимо от того, как вы устанавливаете базовый адрес, всегда существует риск того, что другие не написанные вами библиотеки DLL уже загружены по этому адресу (например, библиотеки DLL с глобальными перехватами).

Кроме того, если вы строите для Vista, вы должны использовать / DYNAMICBASE, чтобы включить ASLR.

Вот ссылка MSDN: http://msdn.microsoft.com/en-us/library/bb384887.aspx.

...