Hardware DEP takes advantage of the NX ("No Execute page protection",
AMD specification) or XD ("Execute Disable", Intel specification) bit
on DEP compatible CPU’s, and will mark certain parts of the memory
(which should only contain data, such as the default heap, stack,
memory pools) as non-executable.
When an attempt is made to execute code from a DEP protected data
page, an access violation (STATUS_ACCESS_VIOLATION (0xc0000005)) will
occur. In most cases, this will result in process termination
(unhandled exception). As a result of this, when a developer decided
he wants to allow code to run from a certain memory page, he will have
to allocate the memory and mark it as executable.
http://www.corelan.be/index.php/2010/06/16/exploit-writing-tutorial-part-10-chaining-dep-with-rop-the-rubikstm-cube/#hwdep
Quando stai provando a reindirizzare il flusso del codice attraverso un exploit di buffer overflow, ecc., vuoi reindirizzare il flusso a uno shellcode / payload personalizzato che ti darà accesso remoto, ecc. al computer vittima.
Lo facciamo riscrivendo registri come EIP (Extended Instruction Pointer), ESP (Extended Stack Pointer), ecc. Con questa tecnologia si tenta di impedire il reindirizzamento del flusso di codice verso posizioni di memoria non autorizzate. Quindi, al fine di invocare la shell, avremmo bisogno di superare la violazione di accesso in teoria.
In sostanza i programmatori devono specificare posizioni di memoria che possono avere codice eseguibile, le altre posizioni hanno dati non eseguibili al momento del richiamo che causano un'eccezione di violazione di accesso.
Leggi di più sui suoi aspetti tecnici qui: link