Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Difficoltà: 3 / 5 Il controllo FBI Spy Memory consente di monitorare il contenuto di un'area di memoria indicata da un puntatore oppure da un puntatore ad un altro puntatore, per l'ampiezza desiderata. I dati possono essere restituiti sia in modalità raw che formattati in esadecimale. Il controllo è particolarmente studiato per l'analisi di stringhe.
Proprietà
Metodi
Eventi
Note Esistono fondamentalmente due modalità di funzionamento: con puntatore diretto o con puntatore relativo ad un altro puntatore. La prima modalità si rivela utile per verificare dati di volta in volta, senza riutilizzare variabili o indirizzi per molte istruzioni. La seconda modalità è utile per analizzare variabili globali, delle quali può cambiare il contenuto ma non la posizione. Il comportamento delle due modalità è regolato dalla proprietà UsePointer: il valore False indica di non utilizzare un puntatore indiretto ma fare riferimento direttamente all'indirizzo indicato dalla proprietà Address; il valore True indica invece che la proprietà Address contiene l'indirizzo di un altro puntatore che l'analisi dovrà utilizzare per recuperare l'indirizzo finale. Nel caso di una variabile stringa, ad esempio potremmo puntare il suo valore assegnando alla proprietà Address il valore restituito da StrPtr(stringa), con la proprietà UsePointer impostata su False. Al cambio di valore della stringa, probabilmente corrisponderà un cambiamento dell'area dati, rendendo quindi il riferimento non più valido. Assegnando invece alla proprietà Address il valore di VarPtr(stringa) ed impostando la proprietà UsePointer su True, indicheremmo sempre l'area dati corretta, poiché all'indirizzo VarPtr(stringa) si trova il puntatore corrispondente a StrPtr(stringa). Anche la proprietà Length può assumere due differenti significati in ragione del valore della proprietà RelativeLength: nel caso che quest'ultima sia False, la proprietà Length indicherà la lunghezza in bytes dell'area di memoria da esaminare; ad esempio 2 per una variabile di tipo Integer o 4 per una di tipo Long. Quando la proprietà RelativeLength contiene il valore True, allora la proprietà Length indicherà la posizione in cui si trova la dimensione dell'area da esaminare. Tale posizione è relativa alla proprietà Address; un valore positivo indica che la lunghezza si trova dopo il puntatore indicato dalla proprietà Address, mentre un valore negativo indica che la lunghezza si trova prima dell'area puntata. Una stringa, ad esempio, contiene la sua lunghezza 4 bytes prima dell'indirizzo dei dati; in tal caso assegneremmo alla proprietà RelativeLength il valore True ed alla proprietà Length il valore -4. Si rivela particolarmente comoda per quei dati come le stringhe la cui dimensione varia costantemente in funzione della loro lunghezza.
Nell'esempio dimostrativo e mostrato nella Figura 1, la lunghezza della stringa analizzata (Specifica un valore per la variabile strTesto) non è determinato direttamente dal form utilizzatore del controllo ma dal riferimento relativo alla lunghezza e dal puntatore a puntatore. Poiché il controllo lavora direttamente con i dati dalla memoria,
un utilizzo errato può comportare malfunzionamenti
del programma, fino al blocco totale del computer. Si raccomanda quindi
di utilizzare il controllo con la massima cura, verificando che i valori
delle proprietà Address, Length e RelativeLength
siano corretti. |
Fibia
FBI
|
Torna all'indice dei Controlli utente |