home *** CD-ROM | disk | FTP | other *** search
- ==========================================================================
-
-
- ********* ********* * *
- * * * * *
- * * * * *
- ********* ********* *********
- * * *
- * * *
- ********* * *
-
-
-
- Version 1.0
-
-
- by Federico Giannici
-
-
- ==========================================================================
-
-
-
- SPY e` una spia delle principali funzioni AmigaDOS ed EXEC.
-
-
- Il programma e` di Pubblico Dominio, puo` quindi essere copiato liberamente
- e non si e` obbligati a pagarmi alcunche` per il suo utilizzo (eventuali
- contributi saranno comunque ben accetti). Non e` pero` ammessa alcuna
- modifica, vendita od inserimento in programmi commerciali, senza il mio
- permesso scritto. Infine non mi assumo alcuna responsabilita` per eventuali
- danni provocati, direttamente o indirettamente, da SPY.
-
-
-
-
-
- COSA FA SPY
- -------------
-
-
- Si puo` scegliere quali funzioni (tra quelle implementate) mettere sotto
- osservazione. Da quel momento ogni chiamata a quelle funzioni da parte di
- qualsiasi programma verra` notificata all'utente.
-
- Vengono visualizzati il nome della funzione, tutti i parametri ed il
- risultato dell'operazione.
-
- I nomi vengono evidenziati con un diverso colore.
-
- Inoltre, spesso SPY mostra, tra parentesi, il nome della struttura il cui
- indirizzo e` stato passato come parametro, per esempio: Devices, Library,
- Resources, ecc.. Nel caso di un Lock, viene mostrato (sempre fra parentesi)
- il nome del file o directory (terminante con un segno "/") completo di
- tutto il path, corrispondente al lock.
-
- Per quanto riguarda i FileHandle viene mostrato il nome del file passato
- alla routine "Open()" al momento dell'apertura del file medesimo. Infatti,
- non sono riuscito a trovare una tecnica ortodossa (documentata) per poter
- risalire al nome del file corrispondente ad un FileHandle.
- Come soluzione parziale al problema, SPY memorizza il nome corrispondente
- ad un determinato FileHandle ad ogni chiamata ad "Open()" e lo cancella ad
- ogni chiamata a "Close()". Quindi non viene mostrato ne` il nome dei file
- aperti prima di caricare SPY, ne` di quelli aperti quando la funzione
- "Open()" non era intercettata.
- Per i FileHandle corrispondenti alle funzioni "Input()" e "Output()"
- vengono mostrati rispettivamente con i nomi "<Input>" e "<Output>".
- Evidentemente, se la funzione "Close()" non e` intercettata, il buffer per
- la memorizzazione dei nomi aumenta in continuazione, e si puo` verificare
- l'eventualita` che il nome del file non sia piu` quello corretto. Per
- evitare tutto cio` e` possibile azzerare il buffer con il comando "Clear
- FileHandle mem" del primo menu`.
- E` chiaro che si tratta di una soluzione di ripiego. Saro` grato a chiunque
- potra` suggerirmi una soluzione migliore.
-
- Infine per le funzioni "Read()" e "Write()" viene anche mostrato il buffer
- da leggere o scrivere come una stringa di caratteri ASCII.
-
-
-
-
-
- CARICAMENTO
- -------------
-
-
- SPY puo` essere caricato sia da CLI che da Workbench.
- Da CLI si ha la possibilita` di specificare, come parametro, il nome del
- file di configurazione, altrimenti verra` cercato il file di default
- "spy.config".
- SPY cerca il file di configurazione prima nella directory corrente e poi,
- nel caso non lo abbia trovato, nella directory "S:".
- Nel caso non riuscisse a trovare il file di configurazione allora
- utilizzera` quella di default: intercettazione attiva, stampante
- disattivata, tutte le opzioni di Preferences attive e tutte le funzioni
- selezionate tranne "FindName()".
-
-
-
-
-
- I MENU`
- ---------
-
-
- GENERAL
-
-
- ACTIVATED
- Se selezionato (simbolo di selezione sulla sinistra) SPY e` attivo.
-
-
- PRINTER
- Se selezionato, tutto cio` che viene mostrato nelle finestra principale di
- SPY viene mandato anche alla stampante.
- E` MOLTO IMPORTANTE che la stampante sia effettivamente ACCESA! In caso
- contrario SPY si potrebbe bloccare, oppure, nel caso apparisse il messaggio
- "Printer Troubles - Check Printer and Cables", si potrebbe avere il blocco
- di tutto il sistema (nel caso SPY stia intercettando particolari funzioni).
-
-
- FUNCTIONS
- Tale comando puo` essere selezionato, piu` semplicemente, con un doppio
- click nella finestra principale di SPY.
- Permette di accedere alla finestra di selezione delle funzioni intercettate
- da SPY. Le funzioni attive sono contrassegnate dal simbolo di selezione
- sulla sinistra.
- In basso si possono attivare cinque comandi:
-
- OK: Accetta la lista di funzioni selezionate attualmente mostrata
- sul video.
-
- ALL: Seleziona tutte le funzioni. C'e` un'unica eccezione:
- "FindName()", perche` solitamente genera un numero molto elevato
- di chiamate (per esempio ogni volta che vengono usati i menu),
- per cui occorre selezionarla esplicitamente clickandoci sopra.
-
- NONE: Deseleziona tutte le funzioni.
-
- RESTORE: Ripristina la lista di funzioni selezionate l'ultima
- volta.
-
- CANCEL: Chiude la finestra senza modificare la lista di funzioni
- selezionate (viene utilizzata quella precedente).
-
-
- SAVE CONFIGURATION
- Viene chiesto il nome del file di configurazione da registrare.
- La configurazione comprende tutte le opzioni di menu`, la lista delle
- funzioni attive e la posizione e dimensione della finestra.
-
-
- LOAD CONFIGURATION
- Viene chiesto il nome del file di configurazione da utilizzare.
-
-
- CLEAR FILEHANDLE MEM
- Cancella il buffer di memoria dei nomi dei FileHandle (vedi "COSA FA SPY").
-
-
- INFORMATIONS
- Mostra un sotto-menu` di presentazione del programma (SPY) e del
- programmatore (Io!).
-
-
- QUIT
- Si puo` attivare anche con il gadget di chiusura della finestra principale
- di SPY.
- Elimina SPY.
- Prima di procedere attende che nessun altro programma stia eseguendo
- qualcuna delle sue funzioni sostitutive.
-
-
-
-
- PREFERENCES
-
- Queste opzioni definiscono il comportamento di SPY nel momento in cui
- intercetta una chiamata ad una delle funzioni attualmente selezionate.
-
-
- DESCRIPTION
- Se impostato su "Verbose" vengono visualizzati tutti i parametri ed il
- valore di ritorno della funzione.
- Se impostato su "Brief" vengono mostrati, su di un'unica linea, solo il
- nome della funzione ed il parametro principale.
-
-
- ACTIVATION
- Se impostato su "Failed Only" vengono mostrate solo le chiamate che
- falliscono.
- Altrimenti vengono intercettate tutte le chiamate.
-
-
- GO ON
- Se impostato su "Wait for GO", una volta mostrata la chiamata alla
- funzione, attende una conferma da parte dell'utente.
- Comincia a lampeggiare il gadget in fondo alla finestra principale di SPY,
- e si puo` dare l'ok clickando tale gadget oppure premendo un tasto
- qualunque (in quest'ultimo caso la finestra di SPY deve essere attiva).
- Se invece si e` impostato "Immediately", SPY non attendera` alcuna
- conferma.
-
-
- SCREENFLASH
- Se impostato su "Activated", qualora il programma sia in attesa di una
- risposta da parte dell'utente (vedi punto precedente), ogni 2 secondi
- (circa) lampeggera` lo schermo, per informare l'utente dello stato di
- attesa (infatti, nel frattempo, il programma chiamante e` bloccato).
-
-
-
-
-
- MISCELLANEA
- -------------
-
-
- La funzione "AllocMem()" viene notificata solo quando si verifica un errore
- (memoria insufficiente), in quanto e` chiamata molto spesso da tutto il
- sistema.
-
-
- Ci sono due casi in cui SPY non puo` fermarsi ad attendere l'OK da parte
- dell'utente (pena il blocco del sistema):
-
- I) Se il nome della MsgPort di una chiamata alla funzione
- "AddPort()" e` "IDCMP" (si e` aperta una finestra).
-
- II) Tutte la chiamate alla funzione "FindName()" fatte
- dall'input.device.
-
-
- Per evitare problemi di overflow dello stack, vengono visualizzate solo le
- chiamate effettuate da Task con uno stack di almeno 1600 bytes.
- Naturalmente cio` non elimina completamente i problemi di overflow, in
- quanto SPY non sa quanto sia effettivamente pieno lo stack.
- Nel caso si verifichi un crash del sistema, provate a disattivare qualche
- funzione fintanto che non fili tutto liscio, individuando cosi` quale e` la
- funzione incriminata (talvolta e` soltanto una che manda tutto in crash).
- La scelta di 1600 bytes non e` casuale. Infatti, il CLI iniziale ha uno
- stack di 1600 bytes (almeno fino al sistema operativo V1.3), anche se al
- momento di eseguire un comando diventa (!?) di 4000 bytes. Qualcuno sa
- dirmi perche`?
-
- Altri curiosi comportamenti del CLI (scoperti con SPY):
-
- Quando il CLI deve eseguire un comando apre la dos.library (probabilmente
- per ottenere l'indirizzo DOSBase) senza pero` richiuderla con la
- "CloseLibrary()". Il contatore di aperture della libreria viene comunque
- successivamente decrementato, probabilmente dallo stesso CLI.
-
- Le chiamate fatte dai comandi standard del CLI (Dir, CD, Delete, ecc.) non
- vengono intercettate. Penso che cio` dipenda dal fatto che tali comandi
- utilizzino una propria libreria interna (probabilmente in BCPL) che chiama
- direttamente le routine di sistema senza passare dalle jump-table delle
- librerie.
-
-
-
-
-
- PER CONCLUDERE
- ----------------
-
-
- Per qualsiasi consiglio, critica, bug, contributo, e soprattutto elogi,
- potete contattarmi all'indirizzo che appare nel menu del programma (e che
- per i piu` pigri riporto alla fine di queste note) oppure sulla BBS MC-Link
- (06-4180440, il mio codice e` MC4080).
-
- Buone investigazioni con SPY.
-
-
-
-
- Federico Giannici
-
- Viale Francia 4
- 90146 Palermo
- Italy
-
-