Delphi长期支持ASLR和其他推荐的Windows安全标志。在最近的11.1版本中,Embarcadero通过呈现特定的链接器选项,在默认情况下启用链接器选项并在RAD Studio中构建包含这些标志的包和应用程序,从而使在Delphi和C++Builder中使用这些标志变得更容易。
有关这些Windows PE标志的更多信息
数据执行保护(DEP)
允许系统将一个或多个内存页标记为不可执行,从而阻止代码从这些内存区域运行,并使利用缓冲区溢出变得更加困难。你可以在此处显示Microsoft文档。
地址空间布局随机化(ASLR)
随机排列进程关键数据区域的地址空间位置,包括可执行文件的基以及堆栈、堆和库的位置。防止利用内存损坏漏洞。你可以阅读关于ASLR的更多信息在维基百科上。
高性能64位ASLR(仅在64位应用中)
允许ASLR尽可能使用整个64位地址空间请在此处阅读。
终端服务
创建终端服务器感知(TSAWARE)应用程序。这与安全无关,由Microsoft负责在这里。
RAD Studio改进的支持
While期间之前存在编译器标志,RAD Studio IDE现在将这些标志作为链接器选项公开。您可以在下面看到Delphi和C++Windows编译器的设置(感谢吉姆·麦基思)
几点注意事项
对于使用运行时包的Delphi应用程序,ASLR编译器配置的工作方式与预期一样。对于在可执行文件的库中链接的程序,程序引用延迟加载的DLL函数的方式存在冲突,这妨碍了预期的行为。这是Embarcadero在发布后发现的问题,将在不久的将来提供修复。
如下所示,对于带有运行时包的应用程序,您可以获得适当的配置,如SysInternals Process Explorer所示:
通常,这些标志强制实施安全性,使用低级代码的应用程序可能不再正常运行。例如,我们发现一些旧的ActiveX控件由于与DEP标志冲突而不再在IDE中工作。
如果您发现应用程序有任何问题,可以禁用这些标志,但我们建议调查根本问题,因为一些公司要求他们使用的所有软件都要启用Microsoft推荐的所有安全标志。