Force HEASLR DllCharacteristics when ASLR bit is set for 64-bit targets

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6953 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2017-11-28 18:15:44 +00:00
parent 4b92898ecb
commit e3e6ee73bc
2 changed files with 8 additions and 3 deletions

View file

@ -2414,7 +2414,9 @@ int CEXEBuild::UpdatePEHeader()
*GetCommonMemberFromPEOptHdr(headers->OptionalHeader, MinorSubsystemVersion) = FIX_ENDIAN_INT16(PESubsysVerMin);
}
// DllCharacteristics
*GetCommonMemberFromPEOptHdr(headers->OptionalHeader, DllCharacteristics) = FIX_ENDIAN_INT16(PEDllCharacteristics);
WORD dc = PEDllCharacteristics;
if ((dc & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) && is_target_64bit()) dc |= IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA;
*GetCommonMemberFromPEOptHdr(headers->OptionalHeader, DllCharacteristics) = FIX_ENDIAN_INT16(dc);
} catch (std::runtime_error& err) {
ERROR_MSG(_T("Error updating PE headers: %") NPRIs _T("\n"), CtoTStrParam(err.what()));
return PS_ERROR;