#1 楼
我相信在XP上,如果您从DLL中删除重定位表(或者将重定位表RVA和数据目录中的大小排除为空),则Windows加载程序将尝试将DLL加载到其首选基址(可选的ImageBase)中。标头),因为它不再可以重定位。 Windows的更高版本可能会根据加载程序选项AFAIK阻止这种情况。评论
同意,CFF Explorer是最好的。
– Ditmar Wendt
13年7月26日在20:55
您说“如果剥离重定位表,则Windows加载器将尝试以其首选基地址加载DLL”。那么,它在哪里尝试加载它呢? Windows是否在其首选基址上加载DLL(除非使用)是不是很重要?我说的是非ASLR案件。
–cubuspl42
18-2-26在22:57
#2 楼
要真正强制DLL加载到特定地址而不先对其进行结构上的更改,您需要首先分配所有剩余的可用内存,当然,请确保目标位置尚未使用。 />要为任何给定文件禁用ASLR,必须在COFF标头的“特征”字段中设置IMAGE_FILE_RELOCS_STRIPPED标志。如果文件选择加入ASLR,则删除重定位表将无法执行。 Windows仍然会移动它,只是不会重定位任何数据。据我所知,您无法全局关闭ASLR。
#3 楼
其他发布者在谈论的是使DLL始终加载到特定地址的通用方法。对于您要执行的操作-确保绝对地址始终与模块相关+偏移量-操作非常简单。
如果您可以在Windows XP系统上加载二进制文件,则完全不知道ASLR。 ASLR,它将确保始终将模块加载到其首选地址。此设置是通过
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages
来控制的。但是,如果首选地址不可用,Windows会将其加载到其他位置。如果遇到此问题,建议您手动修改首选基址。一个好的十六进制编辑器将允许您执行此操作。
评论
stackoverflow.com/questions/9560993/…的重复帖子