Visual Basic Simple
FBI Spy Memory
Visualizza il contenuto di un'area di memoria
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'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à

Utilizzabile in fase di progettazione Utilizzabile in fase di progettazione
Accessibile in lettura in fase di esecuzione Accessibile in lettura in fase di esecuzione
Accessibile in scrittura in fase di esecuzione Accessibile in scrittura in fase di esecuzione
  • Address As Long Accessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta l'indirizzo puntato.
    Rappresenta il puntatore all'area dati da esaminare.

  • Length As Long Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta la lunghezza dell'area dati da restituire.
    Quando la proprietà RelativeLength indica il valore False, Length indicherà semplicemente l'ampiezza dei dati dati da controllare e restituire. Quando la proprietà RelativeLength indica il valore True, Length sarà utilizzata come offset (relativo alla proprietà Address) all'area contenente l'ampiezza dei dati. Vedi note (2).

  • RefreshSpeed As Integer Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta la velocità di aggiornamento.

  • RelativeLength As Boolean Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Determina se il valore specificato nella proprietà Length è relativo alla locazione di memoria puntata (offset).
    Determina il comportamento della proprietà Length. Quando assume il valore False, l'ampiezza dell'area dati da controllare sarà un numero assoluto; in caso contrario la proprietà Length sarà utilizzata come posizione relativa alla proprietà Address. Vedi note (2).

  • UsePointer As Boolean Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta un valore che determina se l'area di memoria contiene un puntatore ad un'altra area di memoria.
    Determina se la proprietà Address conterrà l'indirizzo dei dati da controllare oppure sarà un riferimento ad un'altra area dati. Vedi note (1).

  • UseTimer As Boolean Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta un valore che determina se debba essere utilizzato un timer che genera l'evento Refresh ad ogni intervallo indicato dalla proprietà RefreshSpeed.
    Consente di attivare un timer automatico che ad ogni intervallo indicato dalla proprietà RefreshSpeed lanci l'evento Refresh.

Metodi

  • AbouBox
    Tipo di metodo: Sub
    Parametri richiesti: (nessuno)
    Definizione: Sub AboutBox()
    Mostra le informazioni di copyright del controllo.

  • Content
    Tipo di metodo: Function
    Parametri richiesti: (nessuno)
    Definizione: Function Content() As Variant
    Restituisce il contenuto dell'area di memoria puntata.
    Il valore di ritorno sarà un Variant contenente una matrice di bytes.

  • FormatHex
    Tipo di metodo: Function
    Parametri richiesti: (nessuno)
    Definizione: Function FormatHex() As String
    Restituisce un dump formattato dell'area di memoria puntata.

  • SpyMemory
    Tipo di metodo: Function
    Parametri richiesti: newAddress As Long
    newLength As Long
    Definizione: Function SpyMemory(ByVal newAddress As Long, ByVal newLength As Long) As Variant
    Assegna in un'unica operazione i valori alle proprietà Address e Length e restituisce il contenuto dell'area di memoria indicata.

Eventi

  • Error
    Parametri richiesti: ByVal lngPtr As Long
    ByVal lngLength As Long
    Definizione: Event Error(ByVal lngPtr As Long, ByVal lngLength As Long)
    Viene generato in caso di errore, ovvero quando la lunghezza dei dati è un valore minore di 0 oppure maggiore di 8192.
    È generato dalla funzione Content nel momento in cui viene valutata l'ampiezza dei dati da controllare, sia da dimensione fissa, sia da lunghezza relativa.

  • Refresh
    Parametri richiesti: (nessuno)
    Definizione: Event Refresh()
    Viene generato ad ogni intervallo specificato dalla proprietà RefreshSpeed, se la proprietà UseTimer è impostata su True.

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.

Figura 1
Figura 1

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
18 Dicembre 2002

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice dei Controlli utente