ImageBase
设置为预期的0x400000
。但是,将二进制文件加载到内存中时,初始RVA与文件中定义的ImageBase
不匹配。例如,我看到了内存中的基址设置为0x4B0000
和0x900000
。在干净的VM上以及在使用Immunity和x32dbg以及IDA Free进行调试时,会发生此行为。因为系统代码可以处理加载,并且我的系统在首次执行时是干净的,所以我认为异常的ImageBase
是加载程序细微差别的征兆,而不是篡改。我从没遇到过这种情况,希望对您有任何见解。内存映射的PE标头中的ImageBase
(1f63d04ee95ea041f2f6b1e818d94a7c
)与静态文件中设置的823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1
不匹配: #1 楼
这只是一个首选地址。 Windows可以在几乎任何地址处加载二进制文件,并将其重新设置到这个新位置。必须是64 K的倍数。DLL的默认值为0x10000000。 Windows CE EXE的默认值为0x00010000。 Windows NT,Windows 2000,Windows XP,Windows 95,Windows 98和Windows Me的默认值为0x00400000。来源:MSDN
评论
...只要提供搬迁信息😁
– 0xC0000022L♦
8月17日11:27
评论
如果您的系统启用了aslr(任何> xp),则这是一项安全功能,Windows loader会在每次运行时随机分配地址空间布局感谢您将ASLR引起我的注意@blabb。我会记住该功能。在全新的Windows 10 VM上禁用ASLR并重新启动后,将二进制文件加载到各种调试器时,我仍然看到非0x400000的ImageBase。我在这里注意到这一点仅仅是为了排除ASLR作为这种特殊情况下RVA随机化的原因。