我正在开发一个带有几个dll的64位应用程序。
来自win 32,其中加载的dll的默认基地址 当冲突发生时,它们被移动了0x10.000.000然后移动了。
来自Wintellect的John Robbins建议使用唯一的地址设置dll,因此在不同的运行中使用的内存空间是相同的。他在书中建议调试.net 2.0应用程序,基地址应该以dll名字的第一个字母为指导。
a-c 0x60.000.000
d-f 0x61.000.000
g-i 0x62.000.000
j-l 0x63.000.000
m -o 0x64.000.000
p-r 0x65.000.000
s-u 0x66.000.000
v-x 0x67.000.000
y-z 0x68.000.000
我认为这已经改变了64位。 (至少地址)。
有没有人找到更好的解决方案?
(所以在另一台电脑上运行的地址可以映射到我的?
- 或者在某个地方制造的迷你车可以装载我。)
答案 0 :(得分:2)
由于你移动到64位,我的猜测是你的目标是Windows Vista或更高版本,因为XP 64位从未如此受欢迎(并且扩展支持已经结束)。
在Windows Vista中,引入了地址空间随机化(ASLR),这增加了安全性,因为猜测内存位置变得更加困难。
ASLR将随机化基地址并使用/DYNAMICBASE
(MSDN)启用。因此,不再需要自己生成或计算基址。
正如您所说,可能已经在32位应用程序中进行了变基。这和ASLR不会对调试故障转储产生影响。调试器将能够解析符号。