我们有一个包含许多dll文件的项目,这些文件在应用程序启动时会被加载。 dll文件的baseaddresses确实重叠,以便重新定位内存映像。是否有可能自动分配baseaddresses或计算每个dll文件的“好”基址?
答案 0 :(得分:7)
你可以使用平台SDK附带的REBASE实用程序和Visual Studio我想设置应用程序加载的一大堆DLLS的基地址
您向REBASE提供构成程序的DLLS列表,不包括系统Dll,然后它会对所有DLL执行虚拟加载并为其分配新的基址。
这可以作为最终构建步骤的一部分来执行。
答案 1 :(得分:3)
如果要分发DLL,无论如何设置基址,总是存在一种风险,即您未编写的其他DLL已经加载到该地址(例如全局挂钩DLL)。
此外,如果您正在构建Vista,您应该使用/ DYNAMICBASE来启用ASLR。
这是msdn链接:http://msdn.microsoft.com/en-us/library/bb384887.aspx。