begin process at 2012 05 25 10:46:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Général

 > 

TSR & Détournement d'interrupt(ion)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

TSR & Détournement d'interrupt(ion)

lundi 19 mars 2007 à 20:17:35 | TSR & Détournement d'interrupt(ion)

ghuysmans99

Membre Club
bonjour à tous.
j'ai fait un petit prog en asm 32bits pour dos mais il ne fonctionne pas ... reste à savoir pourquoi !!
pourriez-vous m'aider ??

;Change Int19h (write 'Interrupt Disabled!!' on the screen)
Org 100h

Install:
    Call Change19H

EndInstall:
        Call GoTSR
   
Change19H:
    Mov AH,25H
    Mov AL,19H
;    Push DX
    Mov DX,NewInt19H
    Int 21
;    Pop DX
    Ret

NewInt19H:
;        Push DX
        Mov DX,Msg
    Call PrintStr
;        Pop DX
    IRET

GoTSR:
        Mov AH,31h
        Mov AL,00h
    Mov DX,DS
        Int 21h
        Ret

PrintStr:
    ;Print String on the screen (DS:DX)
    Mov AH,09h
    Int 21h
    Ret

Msg    DB 'Interrupt Disabled!!','$'

lundi 19 mars 2007 à 22:42:31 | Re : TSR & Détournement d'interrupt(ion)

Guilou34

Réponse acceptée !


1-La Fonction 31h demande que DX contienne le nombre de paragraphe à reserver. Or ici  DX=0, donc pas de TSR.
2-Lorsqu'elle est exécutée par int 21h, le retour au  DOS est immédiat.( Ici l'instruction ret  ne sera donc pas exécutée )
3-Dans "change  19h"  il faut:
mov dx,offset newint19h. (ici DX contiendra le contenu de newint19h , c'est à dire le code de mov dx,msg).
4-De  même il faut: mov dx,offset msg
5-En général, le code d'un  TSR doit se disposer de la manière suivante
org 100h
Debut: jmp Install 
Newint:
  ....
iret

Install:
(ici modifier l'interrupt et tout le code qui ne doit s'exécuter qu'au chargement du module)
tsr:
mov dx,offset install
mov cl,  4
shl dx,cl  ; conversion en paragraphe,  
mov ah,31h
int 21h
end Debut
Amicalement

mardi 20 mars 2007 à 16:28:52 | Re : TSR & Détournement d'interrupt(ion)

ghuysmans99

Membre Club
ok! tuas raison pour tous les points SAUF que dans mov dx,offset newint19h dx contiendra non pas le code de newint19h mais un pointeur !!

et encore un autre truc, j'utilise NASM donc pas de Offset ...

et encore enore un autre truc : shl dx,cl sert à quoi ??

merci d'avoir répondu ...
mardi 20 mars 2007 à 18:04:10 | Re : TSR & Détournement d'interrupt(ion)

ghuysmans99

Membre Club
et au fait, ca ne marche PAS ...
mardi 20 mars 2007 à 19:46:44 | Re : TSR & Détournement d'interrupt(ion)

Guilou34

Salut
 Je me suis mal exprimé : "ici " signifie  "dans ton cas"  c'est à dire pour mov dx,newint19h
Avec Nasm il faut utiliser:  lea  dx,newint19h . Lea = Load Effective address
L'allocation de mémoire sous msdos s'opére par paragraphes. Un paragraphe = 16 octets.
Erreur de ma part,  il faut shr dx,cl et non pas shl . Shr  dx,cl = Shift right  dx cl fois. Ce qui revient à diviser dx par16 donc convertir la taille du TSR en paragraphes puisque cl=4.
Qui est-ce qui ne marche pas ?  Pour tester ton  programme il faut bien sûr exécuter  int19h ( une interruption  utilisée par le Bios à la fin du POST)  Avant de le rendre résident , vérifie son fonctionement. Avec  ceci par exemple:
 org 100h
debut:
lea dx,newint19
mov al,19h
mov ah,25h
int 21h
 int 19h ; exécute int 19h
mov ah,0
int 16h ; attend clavier
mov ah,4ch
int 21h ; exit
newint19:
lea dx,msg
mov ah,9
int 21h
iret
msg db 'succes$'

end debut


.  
  

mardi 20 mars 2007 à 23:09:52 | Re : TSR & Détournement d'interrupt(ion)

ghuysmans99

Membre Club
l'instruction LEA ne marche pas ...
et le programme en lui-même ne marche pas non plus

ps: j'ai remplacé lea par mov et ca ne plante pas à la compil, ca ne FONCTIONNE pas !
mercredi 21 mars 2007 à 12:16:27 | Re : TSR & Détournement d'interrupt(ion)

Guilou34


 

Le problème vient de mon ignorance de Nasm. Mille excuses.
 En fait pour cet assembleur mov dx,nom charge effectivement dx avec l'offset de nom, pour charger le contenu de nom il faut écrire mov dx,[nom]
Quant à Lea il ne peut être utilisé que si l'adresse est complexe.
Avec Masm et Tasm il existe des directives pour définir le modèle utilisé ce qui n'est pas le cas avec  Nasm .
Ton programme suppose que cs et ds sont identiques. Est-ce bien le cas? Sinon il suffit d'ajouter au début push cs  , pop ds.
Je me demande  si tu ne t'es  pas inspiré d'un code rédigé pour Tasm ou Masm en model tiny. C'est ce que j'ai cru à première vue. Je vais télécharger Nasm : on apprend à tout age.



    
 

mercredi 21 mars 2007 à 19:03:06 | Re : TSR & Détournement d'interrupt(ion)

ghuysmans99

Membre Club
oui effectivement je m'en suis inspiré mais je n'ai pas fait Ctrl-C Ctrl-V
jeudi 22 mars 2007 à 02:34:52 | Re : TSR & Détournement d'interrupt(ion)

Guilou34

Nasm est asembleur orienté Linux, il y a quelques différences avec masm et tasm
En enregistrant le code suivant sous le nom int16.asm par exemple, la ligne de commande
 nasm -f bin int16.asm -o int16.com
génère un com qui pourra te servir de modèle
 
bits 16
org 100h
debut:
jmp install
newint19:
push ds ; en principe une interruption doit restaurer tous les régistres utilisés
push cs ;  ds= ds de l'appel
 pop ds ; ds=cs
mov dx,message
mov ah,9
int 21h
mov ah,1
;
boucle:
 int 16h
jz boucle
pop ds
iret
message db 'pressez une touche$'
install:
mov dx,newint19
mov ax,2519h
int 21h
mov dx,install
mov cl,3
shr dx,cl
mov ax,3100h
int 21h

pour le tester:

int19

debug
a
int 19
(ici un retour ligne pour quitter l'assembleur)
g

jeudi 22 mars 2007 à 08:00:31 | Re : TSR & Détournement d'interrupt(ion)

ghuysmans99

Membre Club
Réponse acceptée !

justement, je me suis aperçu que nasm n'était pas approprié pour ça ...
j'ai donc pris tasm.
et maintenant ca fonctionne !
voilà le code :

Code            Segment
                Org 100h
                Assume Cs:Code
Start: Jmp Main                         ; Go to the Entry Point

;####################################################################
;########################### Vars & Consts ##########################

NewIntMsgS DB 'This interrupt has been erased','$'

IntDet Equ 19h
TstFnc Equ 19h
TstFncR Equ 0FFh

;####################################################################
;############################ Procedures ############################

CheckInstalled Proc Near
  Mov AH,19h
  Mov AX,TstFnc
  Int 19h
  Cmp AH,TstFncR
  Je CheckInstalled_OK
  Jne CheckInstalled_ERR
 Ret
 CheckInstalled_OK:
  Call DetourneInt
  Call GoTSR
 CheckInstalled_ERR:
  Mov DX,Offset(AiMsg)
  Call PrintStr
  Int 20h
CheckInstalled EndP

DetourneInt Proc Near
 ;Détourne l'interrupt
  Mov AH,25H
  Mov AL,IntDet
  Mov DX,Offset(NewInt)
  Int 21h
 Ret
DetourneInt EndP

GoTSR Proc Near
 ;Met le programme en TSR
  Mov DX,Offset(DynVarsEnd)
  Inc DX
  Int 27h
 Ret
GoTSR EndP

NewInt Proc Near
  Cmp AX,TstFnc
  Jne NewIntMsg
 NewIntTest:
   Mov AH,TstFncR
  Jmp IntRet
 NewIntMsg:
   Mov AL,'X'
   Mov BL,7
   Mov CX,1
   ;Call PrintChr
 IntRet:
  IRet
NewInt EndP

PrintChr Proc Near
 ;Affiche un chr. à l'écran avec l'int 10h (Al=chr, Bl=couleur, Cx=répet.)
 Mov AH,09h
 Mov BH,00h
 Int 0h
PrintChr EndP

PrintStr Proc Near
 ;Affiche une chaine de caractères à l'écran (DS:DX)
  Mov AH,09h
  Int 21h
 Ret
PrintStr EndP

;####################################################################
;########################### Entry Point ############################

Main Proc Near
 ;Entry Point
  ;Affiche le titre
   Mov DX,Offset(CmdMsg)
   Call PrintStr
  ;Call CheckInstalled ;Il va rebooter !!
  Call DetourneInt
  Call GoTSR
; Ret
Main EndP

;####################################################################
;########################### Dynamics Vars ############################
DynVars: ;Début des vars. dyn.

CmdMsg DB '+------------------------------------+',13,10
 DB '|     Anti-Reboot(AR) Protection     |',13,10
 DB '+------------------------------------+',13,10
 DB '$'
AiMsg DB 'Program already installed !','$'

DynVarsEnd: ;Fin des vars dyn.
;####################################################################
;############################ Code Ends #############################

Code    Ends
        End Start



PS: j'utilise notepad++ comme éditeur ... il peut éditer n'importe quoi !!


1 2

Cette discussion est classée dans : int, mov, call, interrupt, dx


Répondre à ce message

Sujets en rapport avec ce message

loader problème de code [ par TRAX44 ] salut tout le monde !!g essayer de faire un loader (petit prog qui charge un autre prog) mais c un desartre je comprend pas très bien ce qui ne marche petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi Problème de saisie [ par RootASM ] Bonjour,Voila, je dois faire une présentation en ASM.1. Entrez un matricule de au moins et au maximum 4 chiffre uniquement 2. Saisir le nom et prenom assembleur/ patronyme [ par maxverypainful ] Bonjour, je suis nouveau en tant qu'étudiant en informatique de gestion et j'ai une question concernant un code que nous devons créer.Il a pour but de Mini OS !! debut [ par Hardouz ] salut a tous ! je debut en ASM je vx bosser un px en ASM je connais l'architechture ect !!! j'ai fais un pti programme mais il ya un probléme 1/ lors probleme d'affichage d'une soustraction [ par calimerros ] [u]Bonjour à tous et à toutes.[/u] Voici un programme que je réalise et je bloque au niveau de l'affichage d'une soustraction (SUB). Pour moi mon pr Addition ASM [ par GibsonUSA ] Bonjour a tous, je débute en ASM 16bits et je bloque pour faire une addition de deux chiffres saisis par l'utilisateur. Voila ce que j'ai fais. A l' Saisie & Calcul de sa taille de caractère en tasm [ par baz13shaz ] je veut saisir une chaine de caractère & calculer sa taille,et je veut charger la chaine saisie en mémoire centrale? que doit je faire? comment je peu Voir si un caractère est dans une chaine [ par Wayth ] Bonsoir, Je viens sur votre forum car je n'arrive pas à trouver un label fonctionnel pour voir si un caractère se trouve ou non dans une chaîne de ca programmation lcd avec menu + commande de platine [ par malabar969 ] Bonjour, Je dois programmer en ASM un micro 80c535.Le programme est en deux partie.Une partie pour l'affichage LCD type HD4480 HITACHI avec menu et co


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales