; *-----------------------------------------------------------------------* ; * LITBOOT * ; *-----------------------------------------------------------------------* ;---------------------------------------------------- ; Lit le secteur de boot et le copie dans un fichier ; Auteur: Yann CLEMENT ; Date: 15/06/00 ;---------------------------------------------------- ; 15/06/00: Ecriture et d‚buggage ;---------------------------------------------------- ; http://kerozenn.online.fr ;---------------------------------------------------- LITBOOT SEGMENT ORG 100h ASSUME CS:LITBOOT JMP debut ;--Variables et constantes---------------------------------------------------- fichier DB 'C:\LITBOOT.DAT', 0 ;--> Indiquez ici le nom du fichier ; ainsi que son chemin d'accès. txt_present DB ' LITBOOT - Yann CLEMENT - Juin 2000', 10, 13, 0 txt_erreur DB 10, 13, ' Erreur...', 10, 13, 0 txt_fin DB 10, 13, ' Fin...', 10, 13, 0 buffer DB 512 DUP (0) handle_fichier DW ? ;----------------------------------------------------------------------------- ;--Proc‚dure------------------------------------------------------------------ affiche PROC ; Affiche une chaine de type ASCIIZ. ; SI doit contenir l'adresse de la chaine. PUSH AX PUSH BX PUSH SI CLD aff_retour: LODSB OR AL, AL JZ aff_saut MOV AH, 0Eh MOV BX, 0007h INT 10h JMP aff_retour aff_saut: POP SI POP BX POP AX RET affiche ENDP ;--- ouvreFICHIER PROC ; Ouvre un fichier et lui donne un num‚ro (Handle). ; DX doit contenir l'adresse du nom de fichier. PUSH AX PUSH CX PUSH SI MOV AX, 3D42h INT 21h JNC ouv_ouvert MOV SI, OFFSET txt_erreur CALL affiche INT 20h ouv_ouvert: MOV handle_fichier, AX POP SI POP CX POP AX RET ouvreFICHIER ENDP ;--- ecritFICHIER PROC ; Ecrit le contenu de buffer dans un fichier. ; nbre_bytes represente le nombre d'octets … lire et handle_fichier le numero du fichier. PUSH AX PUSH BX PUSH CX PUSH DX MOV AX, 4000h MOV BX, handle_fichier MOV CX, 512 MOV DX, OFFSET buffer INT 21h JNC ecrit_ok MOV SI, OFFSET txt_erreur CALL affiche INT 20h ecrit_ok: POP DX POP CX POP BX POP AX RET ecritFICHIER ENDP ;--- fermeFICHIER PROC ; Ferme un fichier ouvert. ; handle_fichier repr‚sente le num‚ro du fichier … fermer. PUSH AX PUSH BX MOV AX, 3E00h MOV BX, handle_fichier INT 21h JNC fer_ferme MOV SI, OFFSET txt_erreur CALL affiche INT 20h fer_ferme: POP BX POP AX RET fermeFICHIER ENDP ;--- litSECTEUR PROC ; Lit le contenu du secteur de boot et le place dans buffer. PUSH AX PUSH BX PUSH CX PUSH DX MOV AX, 0201h MOV BX, OFFSET buffer MOV CH, 0 ;--Piste MOV CL, 1 ;--Secteur MOV DH, 0 ;--Face MOV DL, 0 ;--Lecteur INT 13h POP DX POP CX POP BX POP AX RET litSECTEUR ENDP ;----------------------------------------------------------------------------- debut: ;--Code----------------------------------------------------------------------- MOV SI, OFFSET txt_present ;-- Place l'offset du texte dans SI CALL affiche ;-- Affiche le texte MOV DX, OFFSET fichier ;-- Place l'offset du nom de fichier ;-- dans DX CALL ouvreFICHIER ;-- Ouvre le fichier CALL litSECTEUR ;-- Lit le secteur de boot sur la disquette CALL ecritFICHIER ;-- Ecrit dans le fichier CALL fermeFICHIER ;-- Ferme le fichier ouvert pr‚c‚dement MOV SI, OFFSET txt_fin ;-- Place l'offset du texte dans SI CALL affiche ;-- Affiche le texte INT 20h ;-- Retour au systŠme ;----------------------------------------------------------------------------- LITBOOT ENDS END