如何确定EXE(或DLL)是否参与ASLR,即是否可重新定位



如何确定EXE(或DLL(是否参与ASLR,即是否可重新定位?

我想检查我的系统上的一些EXE是否可以重新定位并参与ASLR。

我知道链接器的默认行为是剥离基重定位,这样EXE就不可重定位了?

我如何从FileAlyzer这样的工具中看到图像是否参与ASLR?

可重定位模块(exe或dll(不一定需要启用ASLR,但启用ASLR的模块需要可重定位。

启用ASLR的模块(使用/DNAMICBASE链接器开关(将在随机地址加载,而不考虑其ImageBase(首选加载地址(,因此它必须是可重定位的,否则无法加载。

如果模块未启用ASLR,则加载程序将首先尝试在ImageBase加载模块。如果这不可能(内存已经分配(,它将尝试在另一个地址加载;如果模块是可重定位的,它将成功,否则它将失败。

如何识别可重定位模块

不可重定位的模块将在其文件头的特征字段中设置IMAGE_FILE_RELOCS_STRIPPED(0x0001(位标志。可重定位模块将清除此位,它还将有一个带有重定位的部分(如.remove(。您可以使用PEView或dumpbin /headers your_module.exe(或dll(等软件检查该标志

如何识别启用ASLR的模块

启用ASLR的模块将是可重定位的(重定位剥离标志未设置(,并且它还将在可选标头的DLLCHARACTERISTICS字段中设置IMAGE_DLLCHARACTERSTICS_DNAMIC_BASE(0x0040(标志。无论名称如何,DllCharacteristics都用于EXE和DLL。

同样,您可以使用PE文件资源管理器(如PEView(或dumpbin /headers your_module.dll(或exe(检查是否存在此标志集。

最新更新