Bonjour,
J'ai besoin de votre aide : je veux écrire un programme en langage assembleur qui détourne une interruption système et je ne sais pas comment faire.
Voici le ficher de TP (dans les pieces jointes).
Bonjour,
J'ai besoin de votre aide : je veux écrire un programme en langage assembleur qui détourne une interruption système et je ne sais pas comment faire.
Voici le ficher de TP (dans les pieces jointes).
Si c'est sous MS-DOS et en mode réel, la table des interruptions se trouve au début de la mémoire, en 0000:0000. Il y a 4 octets par interruption, contenant l'adresse de la routine à appeler.
Si tu veux en détourner une, il suffit de sauvegarder le contenu des quatre octets correspondant à ton interruption, et de le remplacer par l'adresse de ta propre routine, laquelle appelera toute seule la routine originale après avoir fait son propre traitement.
Je ne me souviens plus s'il existe un appel dédié pour le faire. C'est vieux, tout ça ...
Tu as raison, Obsidian. Il éxiste bien une interruption das l'API de MS-DOS permettant de le faire:
Tommy
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 INT 21 - DOS 1+ - SET INTERRUPT VECTOR AH = 25h AL = interrupt number DS:DX -> new interrupt handler Notes: this function is preferred over direct modification of the interrupt vector table some DOS extenders place an API on this function, as it is not directly meaningful in protected mode under DR DOS 5.0-6.0, this function does not use any of the DOS-internal stacks and may thus be called at any time; however, under Novell DOS 7.0 - DR-DOS 7.02, this function was not reentrant. Since 1998/05/29, DR-DOS 7.03 no longer uses any internal stacks and tests for this function much earlier, to allow a minimal stack usage of just two words in addition to the IRET frame, allowing it to be called from INT 21h functions, specificially device drivers. This fixes the MCS SMB client
Partager