|  
        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 | 
         
         
            
            Accessibile in lettura in fase di esecuzione | 
         
         
            
            Accessibile in scrittura in fase di esecuzione | 
         
       
       
      
        - Address As Long 
   
          Restituisce o imposta l'indirizzo puntato. 
          Rappresenta il puntatore all'area dati da esaminare. 
           
           
        - Length As Long 
    
          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 
    
          Restituisce o imposta la velocità di aggiornamento.  
           
           
        - RelativeLength As Boolean 
    
          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 
    
          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 
    
          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 
      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. 
         
       
       |