Domanda

Durante l'esecuzione di uno dei nostri software, un tester ha dovuto affrontare la finestra di dialogo di prevenzione dell'esecuzione dei dati di Windows.

Proviamo a riprodurre questa situazione su un computer sviluppatore per scopi di debug: senza successo.

Qualcuno sa come trovare ciò che può causare la protezione DEP per uccidere l'applicazione? Esistono strumenti disponibili per questo?

È stato utile?

Soluzione

La finestra di dialogo DEP in genere viene visualizzata solo quando si tenta di eseguire codice da un'area che non si sta contrassegnando come eseguibile. Ciò potrebbe essere causato da "thunk" in una libreria che stai utilizzando, ad es. Finestre ATL. Questo problema è stato risolto in ATL 8.0.

Anche un bug di eliminazione dello stack, ad esempio un sovraccarico del buffer, può causare questo problema, impostando l'indirizzo di ritorno in una posizione che non è eseguibile. Ciò potrebbe non causare una violazione di accesso ma un comportamento strano, se DEP è disattivato per il processo o non è disponibile sull'hardware.

Potrebbe accadere anche se si genera un'eccezione C ++ o si genera un'eccezione SEH e i gestori di eccezioni strutturati sono stati eliminati da un sovraccarico del buffer.

Altri suggerimenti

Potenzialmente potrei pensare che ogni volta che provi a scrivere in memoria che non è allocato questo sarebbe un possibile risultato. Potrebbe essere qualcosa sulla falsariga di cancellare un oggetto e poi usarlo o scrivere una stringa in un buffer che è troppo piccolo per trattenerlo.

DEP è influenzato dalla presenza di capacità hardware. Di recente abbiamo avuto una situazione in cui la nostra app funzionava bene su macchine vecchie, ma falliva su quelle nuove. Si è scoperto che sebbene DEP fosse abilitato sia sui vecchi server che sui nuovi server, ci siamo schiantati su quelli nuovi perché il rilevamento dell'hardware era migliore, più aggressivo o qualcosa del genere. Quindi, se il tuo QA può riprodursi ma il DEV non può, allora provalo con un hardware identico ... Anche se sembra irragionevole che il QA avrebbe un PC più nuovo / migliore del dev ... Ci credo assolutamente!
Ecco i miei appunti sulla nostra recente esperienza con questo: Incompatibilità tra Indy 9 e Windows Server 2003?

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