Détournement d'une int bios

Soyez le premier à donner votre avis sur cette source.

Snippet vu 1 990 fois - Téléchargée 14 fois

Contenu du snippet

;détournement d'une interruption bios 
;ex avec 11h (config système) qui devient 10 h(mode vidéo) 
;------------------------------------ 

org 100h 

;avant de bidouiller on sauvegarde le mode video courant 
;------------------------------------------------------- 

mov ah,0fh 
int 10h 
mov [modeVideo],al 

;obtention des adresses des gestionnaires de int 10h et int 11h 
;-------------------------------------------------------------- 

push 0h    ;adresse début IVT 
pop fs    ;devient notre segment de données 
mov edx,40h   ;correspond à l'entrée 10h 
xor ax,ax 
mov ax,[fs:edx]   ;ax contient le word n°1 du pointeur FAR (=segment) 
mov [FAR_segment_bios_10h],ax 
mov ax,[fs:edx+2]  ;ax contient le word n°2 (=offset) 
mov [FAR_offset_bios_10h],ax ; [FAR_segment_bios_10h]:[FAR_offset_bios_10h]=adresse du gestionnaire de int 10h 

mov ax,[fs:edx+4]  ;idem pour int 11h 
mov [FAR_segment_bios_11h],ax 
mov ax,[fs:edx+6] 
mov [FAR_offset_bios_11h],ax ; [FAR_segment_bios_11h]:[FAR_offset_bios_11h]=adresse du gestionnaire de int 11h 

;remplacement de l'adresse du gestionnaire de int 11h par celui de int 10h 
;------------------------------------------------------------------------- 

mov ax,[FAR_segment_bios_10h] 
mov [fs:edx+4],ax 
mov ax,[FAR_offset_bios_10h] 
mov [fs:edx+6],ax 

; test 
;------ 

mov ah,0 
mov al,13h     ;vga 320*200 256 couleurs 
int 11h      ;+++++++++++ revient à int 10h 

push 0a000h 
pop fs 
mov edx,10 
xor ax,ax 
mov al,5 
mov [fs:edx],ax ;on allume un pixel 

;tempo 
;----- 

int 16h  ;on attend une frappe clavier 

;on remet tout dans l'ordre (int 11h redevient int 11h) 
;------------------------------------------------------ 

mov ax,[FAR_segment_bios_11h] 
mov [fs:edx+4],ax 
mov ax,[FAR_offset_bios_11h] 
mov [fs:edx+6],ax 

;on remet le mode video du départ pour sortir proprement 
;------------------------------------------------------- 

mov ah,0 
mov al,[modeVideo] 
int 10h 

ret 

modeVideo  db 0 
FAR_segment_bios_11h dw 0 
FAR_offset_bios_11h dw 0 
FAR_segment_bios_10h dw 0 
FAR_offset_bios_10h dw 0

A voir également

Ajouter un commentaire

Commentaires

cs_parki
Messages postés
75
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019

pour les ultras débutants,ce code est écrit en syntaxe nasm,il est à assembler en binaire et à sortir en .com pour pouvoir être exécuter en mode V86 sur xp (nasm -fbin prog.asm -o prog.com).
Sur windows 64 bits,il faut utiliser une émulateur dos pour le faire tourner.
cs_parki
Messages postés
75
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019

je sais que c'est de la préhistoire mais bon,il faut bien commencer par quelque chose....

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.