基址问题 《程序一重启基址就变化了》

时间:2021-11-29 04:53:54
//第一次
001F4DF0  |.  64:A3 0000000>mov     dword ptr fs:[0], eax
001F4DF6  |.  A1 F4C42400   mov     eax, dword ptr [24C4F4]
001F4DFB  |.  8B0D F0C42400 mov     ecx, dword ptr [24C4F0]          ;  ecx=[24c4f0] 这里
//第二次
00334DF0  |.  64:A3 0000000>mov     dword ptr fs:[0], eax
00334DF6  |.  A1 F4C43800   mov     eax, dword ptr [38C4F4]
00334DFB  |.  8B0D F0C43800 mov     ecx, dword ptr [38C4F0]          ;  ecx=[24c4f0] 这里


为什么会这样子?基址为什么也变化?

10 个解决方案

#1


001,003开头是在堆中的数据吧  就是把代码放到堆中执行了  每次重启申请的内存地址可能就不一样

#2


windows vista开始有动态基地址的功能,只要pe头Dll Characteristics有0x40每次加载时基地址都不一样

#3


你这个是什么系统?

#4


引用 3 楼 wjn92 的回复:
你这个是什么系统?

我用的 win7

#5


引用 2 楼 lactoferrin 的回复:
windows vista开始有动态基地址的功能,只要pe头Dll Characteristics有0x40每次加载时基地址都不一样

如何能让基址不改变? 把pe头Dll Characteristics 去掉?

#6


如果是DLL的话,有可能是重定位的原因。
找偏移。。

#7


如果是dll,可以不管,如果是exe,连接时不要指定/DYNAMICBASE

#8


引用 6 楼 helyna 的回复:
如果是DLL的话,有可能是重定位的原因。
找偏移。。


你好 ,重定向 我了解了一下,程序加载dll的时候是有一个偏移地址?

#9


你的程序是exe还是dll

#10


在链接器里设一个默认地址

#1


001,003开头是在堆中的数据吧  就是把代码放到堆中执行了  每次重启申请的内存地址可能就不一样

#2


windows vista开始有动态基地址的功能,只要pe头Dll Characteristics有0x40每次加载时基地址都不一样

#3


你这个是什么系统?

#4


引用 3 楼 wjn92 的回复:
你这个是什么系统?

我用的 win7

#5


引用 2 楼 lactoferrin 的回复:
windows vista开始有动态基地址的功能,只要pe头Dll Characteristics有0x40每次加载时基地址都不一样

如何能让基址不改变? 把pe头Dll Characteristics 去掉?

#6


如果是DLL的话,有可能是重定位的原因。
找偏移。。

#7


如果是dll,可以不管,如果是exe,连接时不要指定/DYNAMICBASE

#8


引用 6 楼 helyna 的回复:
如果是DLL的话,有可能是重定位的原因。
找偏移。。


你好 ,重定向 我了解了一下,程序加载dll的时候是有一个偏移地址?

#9


你的程序是exe还是dll

#10


在链接器里设一个默认地址