In molti linguaggi di programmazione, l'inizializzazione delle variabili locali è forzata, oppure il motore si rifiuta categoricamente di leggere i dati non inizializzati. Anche nelle lingue in cui puoi leggere le variabili non inizializzate e ottenere così una copia di ciò che è rimasto nella RAM in quella posizione, non puoi contare su di esso essere "casuale"; avrà la tendenza a contenere sempre lo stesso valore, a seconda di ciò che l'applicazione ha fatto in precedenza. Infatti, in C, le variabili locali vengono dallo stack e / o memorizzate nella cache nei registri della CPU, e queste sono risorse che vengono costantemente riutilizzate in tutta l'applicazione.
Se l'articolo che leggi raccomanda di non inizializzare la variabile locale, e poi per leggerli, e si aspetta che questo produca "casualità" , quindi questo articolo sarà bruciato sul rogo, per molte ragioni:
-
La lettura di dati non inizializzati è una chiara violazione delle specifiche; nello standard del linguaggio di programmazione C, questo è chiamato "comportamento non definito" e può produrre risultati problematici, incluso un arresto anomalo dell'applicazione o, peggio ancora, un danneggiamento della memoria silenziosa.
-
Questo tipo di casualità non può essere buono, da qualsiasi nozione di "casualità" di cui parlare.
-
Il comportamento riproducibile è buono . Cercando di ottenere valori non riproducibili da variabili locali, l'articolo promuove solo rendendo il codice impossibile da eseguire il debug, che può solo essere descritto come una cosa stupida da fare . In particolare per la sicurezza. Ciò garantirà quasi la presenza di buchi di sicurezza di lunga durata e difficili da individuare.
Se vuoi casualità, utilizza ciò che il sistema operativo fornisce, ad es. %codice%. È incomparabilmente migliore, sotto tutti i punti di vista, dei rituali fatti in casa irrazionali che servono a propiziare gli dei della casualità.
Modifica: come sottolinea @TerryChia, la tua domanda potrebbe riguardare forzare un'inizializzazione casuale di variabili (locali o meno) da un PRNG, invece di lasciare l'impostazione predefinita valore lì (se c'è è un valore predefinito, ovviamente; in molti linguaggi di programmazione, le variabili locali non hanno alcun valore predefinito). Ciò che chiami "XOR" in quel contesto non è chiaro.
In questo caso, o non leggi le suddette variabili prima di memorizzare un valore significativo in esse, nel qual caso ciò che le variabili inizialmente contenute è completamente irrilevante: non influisce sul comportamento del tuo codice. O tu fai leggi le variabili e poi ottieni questi valori più o meno casuali da loro, rendendo il codice dell'applicazione non riproducibile e portando ai problemi spiegati sopra; vale a dire che il codice sarà difficile da eseguire il debug, aumentando la probabilità e la densità delle vulnerabilità effettive.