"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 :
; d'abord, on sauvegarde l'ancien handler mov ax, 0x3509 ; ah=0x35, al=0x09, cf la doc de int 21h. on récupère l'ancien handler en es:bx les bx, oldhandler ; adresse de "oldhandler" dans es:bx (utilisé par 21h pour y stocker l'adresse de l'ancien vecteur) int 21h ; on met en place le nouveau handler mov ax, 0x2509 ; service 25h de int 21h utilisé, cf doc lds dx, newhandler ; int 21h ; et on remet tout en place quand c'est terminé mov ax, 0x2509 lds dx, oldhandler int 21h
|
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
Message édité par Harkonnen le 23-03-2010 à 11:42:26
---------------
J'ai un string dans l'array (Paris Hilton)