banderas Conjunto PE
Puede usar {$SetPEOptFlags $40}
para establecer el indicador DEP y {$SetPEOptFlags $100}
para establecer el indicador ASLR. Para establecer ambos use {$SetPEOptFlags $140}
.
Si tiene una versión de Delphi con las definiciones necesarias en la unidad windows.pas puede utilizar el mucho más legible:
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_NX_COMPAT or
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE }
Normalmente se incluyen el ajuste $SetPEOptFlags
en el archivo .dpr. Por lo tanto, debe asegurarse de que Windows
esté en la cláusula de uso del archivo .dpr para que estas constantes IMAGE_XXX
estén disponibles.
Conjunto política DEP en tiempo de ejecución
Para las versiones que no son compatibles con los enfoques basados en la bandera de PE puede llamar a esta función al principio de la inicialización de la aplicación:
procedure EnableDEP;
const
PROCESS_DEP_ENABLE: DWORD=$00000001;
var
SetProcessDEPPolicy: function(dwFlags: DWORD): BOOL; stdcall;
begin
SetProcessDEPPolicy := GetProcAddress(GetModuleHandle(kernel32),
'SetProcessDEPPolicy');
if Assigned(SetProcessDEPPolicy) then begin
//don't bother checking for errors since we don't need to know if it fails
SetProcessDEPPolicy(PROCESS_DEP_ENABLE);
end;
end;
Esto funcionará para cualquier versión de Delphi.
No se puede establecer el indicador ASLR en el tiempo de ejecución, ya que influye en cómo se carga el módulo. Por lo tanto, ASLR solo se puede establecer usando indicadores PE.
banderas PE Modificación de versiones muy antiguas de Delphi
Las versiones anteriores de Delphi no son compatibles con $SetPEFlags
y $SetPEOptFlags
. Para tales versiones necesita usar una herramienta externa para modificar el post-build ejecutable. Cuando originalmente escribí esta respuesta, asumí que EDITBIN
de MS toolchain haría el trabajo. Para DEP será suficiente, usando la opción /NXCOMPAT
. Para ASLR, necesitará usar un editor de indicadores de PE diferente. Mi búsqueda web reveló peflags
de cygwin.
peflags --dynamicbase=true --nxcompat=true MyApp.exe
Estoy seguro de que hay otras opciones de edición de banderas PE disponibles.
Esto funciona muy bien. ¡Gracias! – Mick
El enlace editbin está roto – OnTheFly
Un par de notas: Editbin.exe es parte de todas las versiones de Visual Studio. La opción necesaria/nxcompat está en VS 2008 y posteriores. Tenga en cuenta que en una instalación en stock de VS 2010, editbin.exe puede arrojar errores relacionados con dlls faltantes. Resolví esto simplemente copiando en dlls al directorio donde reside editbin.exe. – Jonesome