Newsgroup: it.comp.os.dos
Titolo: interrupt di RESET

Sapete indicarmi qual'è l'interrupt da richiamare (se esiste) o le
operazioni da fare per fare il reset di una sistema DOS da programma?
ciao e grazie
Omar

 operazioni da fare per fare il reset di una sistema DOS da programma?
L'interrupt sarebbe il 19h, ma è deprecabile basarsi su di esso per
un *corretto* reboot della macchina. Il perchè lo puoi leggere nelle
FAQ di comp.lang.asm.x86. Io mi sono scritto questi due batch per
il warm reboot (senza il test della memoria, come premere CTRL+ALT+DEL)
e per il cold reboot (con il test della memoria):
=== creboot.bat ==========================================inizio=====
@echo +----------------------------------------------------------+
@echo !             fantoibed Cold Rebooting utility             !
@echo !                 
http://www.fantoibed.com
                 !
@echo +----------------------------------------------------------+
@echo A >creboot.tmp
@echo MOV     AX,0040 >>creboot.tmp
@echo PUSH    AX >>creboot.tmp
@echo POP     DS >>creboot.tmp
@echo MOV     WORD PTR [0072],0000 >>creboot.tmp
@echo MOV     AX,FFFF >>creboot.tmp
@echo PUSH    AX >>creboot.tmp
@echo MOV     AX,0000 >>creboot.tmp
@echo PUSH    AX >>creboot.tmp
@echo RETF >>creboot.tmp
@echo. >>creboot.tmp
@echo N 
CREBOOT.COM
 >>creboot.tmp
@echo R CX >>creboot.tmp
@echo 0014 >>creboot.tmp
@echo W >>creboot.tmp
@echo Q >>creboot.tmp
@echo. >>creboot.tmp
@debug <creboot.tmp >NUL
@del creboot.tmp >NUL
@creboot
=== creboot.bat ==========================================fine=======
=== wreboot.bat ==========================================inizio=====
@echo +----------------------------------------------------------+
@echo !             fantoibed Warm Rebooting utility             !
@echo !                 
http://www.fantoibed.com
                 !
@echo +----------------------------------------------------------+
@echo A >wreboot.tmp
@echo MOV     AX,0040 >>wreboot.tmp
@echo PUSH    AX >>wreboot.tmp
@echo POP     DS >>wreboot.tmp
@echo MOV     WORD PTR [0072],1234 >>wreboot.tmp
@echo MOV     AX,FFFF >>wreboot.tmp
@echo PUSH    AX >>wreboot.tmp
@echo MOV     AX,0000 >>wreboot.tmp
@echo PUSH    AX >>wreboot.tmp
@echo RETF >>wreboot.tmp
@echo. >>wreboot.tmp
@echo N 
WREBOOT.COM
 >>wreboot.tmp
@echo R CX >>wreboot.tmp
@echo 0014 >>wreboot.tmp
@echo W >>wreboot.tmp
@echo Q >>wreboot.tmp
@echo. >>wreboot.tmp
@debug <wreboot.tmp >NUL
@del wreboot.tmp >NUL
@wreboot
=== wreboot.bat ==========================================fine=======
Nota 1: Se metti un rem davanti a "@del ?reboot.tmp >NUL" ti rimane
        il sorgente asm in ?reboot.tmp
Nota2: Mi sono basato sul file 
restart.com
 presente in 
       windows\command\edb.cab del mio windows98se
Nota3: I programmatori Microsoft hanno usato un piccolo trucchetto
       in stile Quick & Dirty aggiungendo a mano un "indirizzo di
       ritorno" nello stack ed eseguendo retf invece che un jmp.
       Visto che per il processore è indifferente ed io sono
       pigro, ho mantenuto quello stile.... ;-)
-- 
http://www.fantoibed.com
      linux       
http://fantoibed.cjb.net
     addicted     
fant...@iname.com

        pigro, ho mantenuto quello stile.... ;-)
Ho riscritto le due utilities in modo piů "pulito" e piů semplice
da capire per i meno abituati al reversing. Ne ho anche ridotto
le dimensioni da 20 bytes a 17 (fantoibed:Microsoft=1:0) :-))
Posto direttamente il listato da assemblare con il debug.
Se serve uno script batch per l'autocompilazione, basta dirlo... ;-)
=== wreboot.asm ==========================================inizio=====
MOV     AX,0040                            
PUSH    DS                                 
POP     AX                                 
MOV     DI,0072                            
MOV     WORD PTR [DI],1234                 
JMP     FFFF:0000                          
=== wreboot.asm ==========================================fine=======
=== creboot.asm ==========================================inizio=====
MOV     AX,0040                            
PUSH    DS                                 
POP     AX                                 
MOV     DI,0072                            
MOV     WORD PTR [DI],0000                 
JMP     FFFF:0000                          
=== creboot.asm ==========================================fine=======


reperibili su 
http://volftp-mondadori.com
).
Sei sicuro che non fosse il 19h?
-- 
Ciao,
Fabrizio
"Le cose importanti nella vita sono le cose che hanno valore"
(Fabio Volo)

JMP     FFFF:0000
Prova a tradurle con istruzioni in ascii-7:-) D'altra parte che le
posti a fare in .asm, se sei rimasto solo tu, e pochi altri ancora,
fissato col meraviglioso assembly? Visual basic no?
-- 
Ci sentiamo  |  Remigio Zedda  || Attenzione! campo "From:" alterato
ciao Remigio |                 ||==> E-mail: 
remi...@tiscalinet.it
-------------|      ..si` d'accordo.. ma con la Deb e` un'altra cosa!
/* Linux 2.2.17 su Debian GNU/Linux 2.2 Potato */

fissato col meraviglioso assembly? Visual basic no?
Giammai!
Prova a fare un programma di reboot in visual basic, e poi mi dici
quanti hd servono, sempre che tu ci riesca.
-- 
           |Save our planet!
  Ciao     |Save wildlife;
  roberto  |For your E-MAIL use only recycled Bytes !!
           |roberto poggi  
rpo...@softhome.net

 Visual basic no?
L'ho usato per meno di una settimana, non mi piace!
E poi voglio vedere quando esce un Visual Basic per
i microcontrollers, ad esempio! ;-))
In definitiva, le nuove versioni rivedute e corrette sono:
-= Warm =-
B84000        MOV     AX,0040
50            PUSH    AX
1F            POP     DS
C70672003412  MOV     WORD PTR [0072],1234
EA0000FFFF    JMP     FFFF:0000
-= Cold =-
B84000        MOV     AX,0040
50            PUSH    AX
1F            POP     DS
C70672000000  MOV     WORD PTR [0072],0000
EA0000FFFF    JMP     FFFF:0000


quanti hd servono, sempre che tu ci riesca.
*Io* visual basic? Jamais de la vie!! Sara` "visual" ma io non l'ho
mai visto, manco in cartolina illustrata. Per caritaaaaaa`!


Cosa intendi per "istruzioni in ascii-7" ?
Gia`, non ci sei su icsv (sicurezza.virus). C'era un thread su Eicar.
Se compili istruzioni macchina con codici operativi 0-127, un testo
aschi non esteso diventa.. un eseguibile (e lo batti tutto a macchina).


 aschi non esteso diventa.. un eseguibile (e lo batti tutto a macchina).
Si, come no. Battimi il codice 0, o il ritorno carrello (13), o il 
backspace (8)...
La codifica a 7 bit è un'altra cosa, non indica che è composta solo 
da testo, per quello ci vuole l'uuencode.
-- 
News2000 1.5ß Version 
http://socket2000.8m.com

backspace (8)...
Giulio, e' proprio li', il difficile.
Costruire un programma che una volta compilato, non contenga nessun byte
superiore al 127.
E ci si riesce, non per fare proprio tutto, ma ci si riesce.


 E ci si riesce, non per fare proprio tutto, ma ci si riesce.
Ma devi anche evitare i codici inferiori al 32, perchè molti di 
questi non sono stampabili... Ergo: 32..127. E cmq, detto fra noi... 
Quali vantaggi ha? :D


 e664	out	64,al
In pratica setta il bit 0 del controller 8042 della tastiera facendo
riavviare la macchina. Un'altro metodo furbo per produrre un cold
reboot è quello che si basa sulla PS/2-POS, sempre 4 bytes:
B001    MOV	AL,01
E692    OUT	92,AL
...ma io preferisco il metodo "standard"! E` più affidabile! ;-)


Quali vantaggi ha? :D
Passa inosservato dentro ad un testo (non e' un allegato, non e'
riconosciuto come binario, e funziona anche se hai un processore a sette
bit :-) ), non necessita di nessuna codifica mime od altro per essere
trasmesso, e poi, vuoi mettere vincere la sfida all'impossibile? :-)


da testo, per quello ci vuole l'uuencode.
Capisco che "uuencode" lo dici per indicare invece i soli caratteri
stampabili.. be' ovviamente si`, penso che ci si debba limitare ai
caratteri da 32 a 126 decimale.
Ben altra cosa e` pero`, ovviamente, limitarsi ad usare istruzioni
assembly che abbiano codice operativo esadecimale uguale solo a quello
di uno dei caratteri 32-126.
Se butti un occhio a Eicar vedi come, anche con un uso massiccio di
push e pop, riesca (in piu` del doppio o triplo di passi) in questa
limitazione.
[sull'utilita` e altro ho visto gia` le risposte di Roberto:-)) ]


...ma io preferisco il metodo "standard"! E` più affidabile! ;-)
Cavoli, piu` affidabile dell'int 19h !?


 Cavoli, piu` affidabile dell'int 19h !?
Già! ;-)


 molto più chiara di come vengono usati i segmenti.
Pardon, i due disassemblati si riferivano a
mov word ptr[72],1234
e
ds:
mov word ptr[72],1234
...In pratica, si vede che "ds:" è del tutto superfluo!

Già! ;-)
Gia`
.. e lo sapevo pure e non ricordavo.
Ho provato a cambiare nella tavola dei vettori d'interrupt, con debug,
e mettere 00 al posto di 8a all'offset 00.
Con contr_alt_del rimette tutto a posto, con l'int 19h no.
E non solo! Non cancella neppure la memoria, cosi` mi e` successo che..
Nel p133 di prova ho Grub (il loader di Linux). Ebbene, facendo girare
il file 
bbb.com
 (che contiene solo la parola "19CD") grub si e`
bloccato al primo stage non trovando il disco: infatti i dischi vengono
invertiti in memoria (da grub stesso) e dunque tali erano rimasti.
Dimostrazione, dunque.


operazioni da fare per fare il reset di una sistema DOS da programma?
mov al,0FEh
out 64h, al
Leonardo
-- 
".signature": bad command or file name

E ci si riesce, non per fare proprio tutto, ma ci si riesce.
Ci si riesce anche facendo tutto *grin*
