gestion d'intérruptions, modification 80x86 - ASM - Programmation
Marsh Posté le 23-03-2010 à 11:09:46
Quand tu parles de la nouvelle instruction, tu veux dire "l'instruction sur laquelle pointe l'IP" ?
Parce que de mémoire y'a rien de spécifique... à part qu'à la fin évidemment faut balancer le bon return pour revenir au point d'interruption, mais au début, que dalle.
Marsh Posté le 23-03-2010 à 11:35:13
"Modifier le IP qui pointera sur la nouvelle instruction que je déciderai"....
Mais ça va pas non ? et l'adresse de retour, tu la récupères comment ? Et le contexte de pile, et tout ? T'as envie de bloquer ta machine toi hein
Le détournement d'un vecteur d'interruption se fait de la manière suivante :
- on sauvegarde d'abord l'adresse de l'ancien handler (fonction 35h de l'interruption 21h)
- on met en place le nouveau handler (fonction 25h de l'interruption 21h)
- une fois le boulot terminé, on remet tout en place (idem)
exemple
Code :
|
Ne pas oublier de terminer le code de ton vecteur par l'instruction "iret".
La doc de 21h, service 35h : http://www.gladir.com/LEXIQUE/INTR/int21f35.htm
Et celle du service 25h : http://www.gladir.com/LEXIQUE/INTR/int21f25.htm
Marsh Posté le 17-04-2010 à 09:47:38
A la fin de ton interruption matérielle tu es obligé d'envoyer 0x20 sur le port 0x20 avant le iret.
Evite aussi de massacrer les registres : voilà pourquoi tu devras empiler ceux que tu modifies sur la pile (et pas oublier de les dépiler avant le iret)
Marsh Posté le 22-03-2010 à 15:47:08
Bonjour,
j'essaie de m'informer sur le sujet mais j'ai bien de la misère à trouver. Je programme en asm 80x86 et j'essaie de modifier l'interruption 9h de la table de vecteur d'interruption. Je sais que pour ce faire, je dois modifié le IP qui pointera sur la nouvelle instruction que je déciderai. Par contre, je ne sais tout simplement pas à quoi devrait ressembler ma nouvelle instruction. Je veut que mon interruption matérielle(dans ce cas-ci gérée par le clavier) affiche la caractère en décimal choisi sur le clavier.
J'ai essayé certaines choses par contre... rien n'abouti.
Merci de m'éclairer un peu!