我们有一个项目,其中包含许多 dll 文件,这些文件在应用程序启动时会被加载。dll 文件的基地址确实重叠,因此内存映像被重新定位。是否有可能自动分配基地址或为每个 dll 文件计算“好”基地址的方法?
frast
问问题
638 次
2 回答
7
您可以使用平台 SDK 和 Visual Studio 附带的 REBASE 实用程序,我认为可以设置应用程序加载的一大堆 DLLS 的基地址
您向 REBASE 提供组成程序的 DLL 列表,不包括系统 Dll,然后它执行所有 DLL 的虚拟加载并为它们分配新的基地址。
这可以作为最终构建步骤的一部分执行。
Dobbs 博士有一篇关于 rebase的文章和一篇关于 rebase的Microsoft 文章。
于 2008-10-08T07:25:37.270 回答
3
如果您正在分发 DLL,无论您如何设置基地址,始终存在并非由您编写的其他 DLL 已经加载到该地址的风险(例如全局挂钩 DLL)。
此外,如果您正在为 Vista 构建,您实际上应该使用 /DYNAMICBASE 来启用 ASLR。
这是 msdn 链接:http: //msdn.microsoft.com/en-us/library/bb384887.aspx。
于 2008-10-08T12:50:59.127 回答