| 
      Sezione | 
      
       
   
    
      Indirizzi Base
    
    
    
      Registri Interni
    
      | 
    
| Capitolo 1 | 
| Il Processore e il Debugger | 
      DEBUG 2/22 [30 di 60]  | 
 
  | 
| 
     | 
    
  | 
  
| Nel linguaggio comune un bug è una cosa fastidiosa, un pidocchio, una cimice, una calamità... | ||
| Gli anglosassoni sono molto immediati nel definire i concetti e, spesso, associano ad eventi tecnici un'immagine forte e molto colorata; così un errore di programmazione diventa un bug.... | ||
| .... e lo strumento che consente di localizzare ed eliminare i bug è diventato Debugger, lo "spulciatore"... | ||
| La realtà è, a mio avviso, molto più nobile: il Debugger è molto di più, è un amico inseparabile, in grado quasi sempre di aiutarti a risolvere i problemi e a trovare gli errori più subdoli; la sua forza consiste nella capacità di simulare l'esecuzione di qualunque programma eseguibile (sia di tipo COM che di tipo EXE). | ||
| Se l'assemblatore ha ritenuto corretta la sintassi del sorgente e il linker ha generato senza errore l'eseguibile non è detto che il nostro programma "giri" come ci aspettiamo; al contrario sono spesso in agguato gli errori di concetto che si manifestano di solito con devastante arroganza, bloccando tutto il computer e costringendoci a resettarlo (premere il pulsante di reset o chiudere l'applicazione con Ctrl-Alt-Canc). Sono i cosiddetti errori in run-time. | ||
In questi casi il modo migliore per capire
    dove abbiamo sbagliato è ricompilare il sorgente con dei break-point,
    cioè dei punti in cui il programma è costretto a fermarsi.
  | 
| 
           | 
          I break-point di solito si fissano inserendo nel punto desiderato l'istruzione INT 03H (Ricorda bene questo concetto!!); la loro presenza è del tutto irrilevante nell'esecuzione normale di un programma, ma se l'eseguibile è fatto girare sotto DEBUG esso si fermerà proprio nel punto previsto, consentendo l'esecuzione passo-passo delle successive istruzioni, fino a localizzare quella che ha creato l'errore run-time. | 
| 
     
  | 
  
Dunque nella fase di
    collaudo e messa a punto di un programma il Debugger
    è uno strumento di lavoro particolarmente utile; da questo punto di vista
    si occupa del  caricamento in memoria dell'eseguibile, in modo paragonabile a
    quello del  loader del sistema operativo e, dopo aver preparato i puntatori
    alla prima istruzione (CS:IP) e alla prima locazione dello stack
    (SS:SP)
    cede il controllo a noi, manifestando la sua disponibilità con un trattino
    posto sulla riga successiva all'intestazione:
 
 
  | ||||
| L'immagine proposta mostra l'intestazione del Symbolic Debug della Microsoft, SymDeb.exe, una versione più dotata di quella di solito disponibile, tipica del sistema operativo e fornita con esso, Debug.exe; le differenze tra le 2 versioni sono funzionali, ma sostanzialmente assicurano lo stesso servizio. | 
| 
     
  | 
  
Non bisogna ignorare, in questa fase di
    presentazione, l'altra grande valenza del Debugger: forse è esagerato
    chiamarlo programma per voyeur, ma
    certamente grande è l'emozione nel cercare di capire la logica che ha
    spinto un programmatore a sviluppare la propria creatura: il Debugger è in
    grado di dare questa emozione!
  | 
| 
           | 
          Con il Debugger è possibile aprire ed eseguire qualunque programma eseguibile: poichè è in grado di mostrarne il codice dissassemblato (molto vicino a quello sorgente originale) è facile scorrerne il contenuto, per cercare di capire o scoprire i trucchi del suo autore. (come pensi che facciano i "crackatori" di professione?). | 
| 
     
  | 
  
| Detto questo non rimane che cominciare l'avventura... | 
  | 
| 
      
       |  
    Capitolo 1 | 
      
       | 
    DEBUG 2/22 | 
    
    ![]()  | 
    
    ![]()  | 
    
    ![]()  | 
 ||
| 30 di 60 | 
      
  | 
    
| 
     
  | 
  
        
  | 
    
        
  | 
    
| 
      
         
        Home 
     | 
      
  | 
    |||||||
      
  | 
       
          
        Motore Ricerca  | 
      
  |