Domanda

Ho un compilatore che compila il linguaggio assembly in linguaggio macchina (in memoria).Il mio progetto è in C# .net.C'è un modo per eseguire la memoria su un thread?Come può il DEP prevenirlo?

byte[] a:  
01010101 10111010 00111010 10101011 ...
È stato utile?

Soluzione

Dubito che esista un modo supportato.Non lo so e non ho fatto ricerche, ma ecco alcune ipotesi:

Il modo più semplice potrebbe essere avviarlo come processo:scrivilo in a File *.com e poi dire al sistema operativo di eseguire l'eseguibile.

In alternativa, passare la memoria come parametro al file CreateThread funzione (ma dovrai preoccuparti che il codice abbia le giuste convenzioni di chiamata, si aspetti i parametri specificati, preservi i registri e sia in memoria che è eseguibile).

Un'altra possibilità è scrivere i codici operativi nella memoria che si sa sarà già eseguita (ad es.sovrascrivere il codice esistente in una DLL caricata di recente).

Altri suggerimenti

La chiave è di mettere il codice eseguibile in un blocco di memoria allocato con VirtualAlloc tale che il buffer è marcato come eseguibile.

IntPtr pExecutableBuffer = VirtualAlloc(
  IntPtr.Zero,
  new IntPtr(byteCount),
  AllocationType.MEM_COMMIT | AllocationType.MEM_RESERVE,
  MemoryProtection.PAGE_EXECUTE_READWRITE);

(quindi utilizzare VirtualFree per pulire dopo te stesso).

Questo dice a Windows che la memoria deve essere contrassegnato come codice eseguibile in modo che non si innescherà un controllo DEP.

E 'possibile eseguire byte come codice:

Inline x86 ASM in C #

Si richiede l'uso del codice unsafe.

ho pensato che questo era solo un fatto divertente ma inutile nella pratica, ma forse l'applicazione in realtà ha un uso per questo:)

È possibile whitelist l'applicazione dal pannello di controllo http://ask-leo.com/how_do_i_turn_off_data_execution_prevention_errors.html

dubito che si possa whitelist che programattically, ma certamente non senza accesso admin - che verrebbe vanificato l'obiettivo di questa funzione di sicurezza

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top