如何在Delphi 10.4中启用SafeSEH与CFG(控制流防护)?
在Delphi 10.4中启用SafeSEH与CFG安全标志
Delphi 10.4支持通过{$SETPEOPTFLAGS}编译指令直接设置PE头的安全标志,结合你已启用的ASLR($140),可按以下方式添加SafeSEH和CFG:
启用SafeSEH
SafeSEH(结构化异常处理保护)对应的PE选项值为$4000,将其与ASLR的标志值合并后,编译指令如下:
{$SETPEOPTFLAGS $4140} // 同时启用ASLR ($140) + SafeSEH ($4000)
注意:SafeSEH仅对32位Windows程序有效,64位程序默认不依赖该机制,转而使用SEHOP等替代方案。
启用CFG
CFG(控制流防护)对应的PE选项值为$40000,合并ASLR后的指令为:
{$SETPEOPTFLAGS $40140} // 同时启用ASLR ($140) + CFG ($40000)
若需同时启用ASLR、SafeSEH和CFG(仅32位程序适用),可合并所有标志值:
{$SETPEOPTFLAGS $44140} // ASLR ($140) + SafeSEH ($4000) + CFG ($40000)
验证标志生效
编译完成后,可通过dumpbin等工具查看PE头的DllCharacteristics字段,确认对应标志位是否被设置:
- ASLR对应
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE($0040)和IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY($0100),合值$140 - SafeSEH对应
IMAGE_DLLCHARACTERISTICS_SAFESEH($4000) - CFG对应
IMAGE_DLLCHARACTERISTICS_GUARD_CF($40000)
内容的提问来源于stack exchange,提问作者RajKumar Sivanantham
相关产品推荐
相关产品推荐

