|
 |
La
Tabella dei Vettori |
SCHEDA n° 04 [
15
di 15] |
 |
|
Recupero e riattivazione del Vettore originale |
|
 | I programmi che si appropriano dei Vettori della Tabella
dovrebbero provvedere alla loro
disinstallazione completa, cioè tale da garantire il ripristino
assoluto del sistema, in modo da lasciare, in uscita, condizioni completamente
identiche a quelle trovate in ingresso. |
 | In particolare, in caso di manomissione, dovrebbero
occuparsi di rimettere nelle caselle
della tabella gli indirizzi delle
procedure di servizio originali. |
 | Per questa ragione i programmi TSR ben progettati
conservano dentro di sè le locazioni di deposito con i vettori delle procedure
di sistema eventualmente sostituiti, per esempio nella forma e con il nome di
quelle discusse in queste pagine:
|
old_INT
DD 00000000H |
|
old_SEG
DW 0000H
old_OFF DW
0000H |
|
 | Naturalmente la fase di ripristino
è del
tutto analoga a quella trattata in precedenza a proposito dell'Installazione
di un nuovo Gestore, con la differenza che, ora, il puntatore
da rimettere nella Tabella dei
Vettori d'Interruzione non è
CS:new_INT ma il contenuto
delle 4 locazioni di deposito, espresse nella forma a 2 word,
CS:[old_SEG] e CS:[old_OFF],
oppure in quella a doubleword, CS:[old_INT]. |
 | Valgono quindi le tecniche suggerite nella pagina
precedente, con le dovute piccole modifiche; in particolare:
 | l'uso della
specifica Funzione 25H
del
kernel del
sistema operativo DOS (INT
21H) o l'uso delle normali tecniche di
scrittura di memoria |
 | l'accortezza di disabilitare (CLI) le
interruzioni mascherabili durante la modifica della
Tabella dei Vettori,
riabilitandole (STI)
subito dopo. |
|
 | Data l'inutilità di ribadire concetti già espressi ci
limitiamo a descrivere la tecnica di Ripristino del Vecchio vettore con la
Funzione 25H del DOS (per altro di gran lunga
più pratica delle altre tecniche); come valore aggiunto mostriamo l'uso della
potente istruzione LDS, che assume in un
colpo solo i 4 bytes conservati nella
doubleword CS:[old_INT] e li lascia
nei registri DS:DX, a disposizione della
funzione DOS (alla quale si passa in AL
anche il numero del vettore da ripristinare):
|
PUSH DS
CLI
LDS DX,CS:[old_INT]
MOV
AL,xy
MOV
AH,25H
INT
21H
POP
DS
STI
|
|
 | Per completezza mostriamo anche il codice assembly per fare
la stessa operazione a partire dai 4 bytes conservati nelle 2
word CS:[old_OFF]
e CS:[old_SEG]: anche in questo
caso sono lasciati nei registri DS:DX, a
disposizione della funzione DOS (alla quale si passa in AL
anche il numero del vettore da ripristinare):
|
PUSH DS
CLI
MOV DX,CS:[old_OFF]
MOV
DS,CS:[old_SEG]
MOV
AL,xy
MOV
AH,25H
INT
21H
POP
DS
STI
|
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|