IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

Détournement de l'IRQ12


Sujet :

x86 16-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : passionné
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 29
    Par défaut Détournement de l'IRQ12
    Bonjour,
    lorsque je détourne l'adresse du gestionnaire de l'IRQ12 (int 74h=événement souris),ma routine ne s'exécute que lors du premier événement souris détecté
    mais pas pour les suivant.

    ex: un code où j'affiche simplement une lettre à chaque IRQ12 déclenchée.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    org 100h
     
    mov ax,cs
    mov ds,ax
     
    ;sauvegarde du pointeur originale sur IRQ 12=int 74h (souris)
     
    push 0
    pop es
    mov si,74h
    shl si,2
     
    cli
    mov ax,[es:si]
    mov [offset_IRQ12_original],ax
    mov ax,[es:si+2]
    mov [segment_IRQ12_original],ax 
     
    ;mis en place de notre IRQ12 perso
     
    mov ax,souris
    mov [es:si],ax		;offset
    mov ax,cs
    mov [es:si+2],ax	              ;segment
    sti
     
    ;mode texte 80*25 16 couleurs
     
    mov ah,0	
    mov al,3h
    int 10h
     
    ;boucle infinie
     
    jmp $
     
    ;restauration de IRQ12 original (qu'on n'atteint jamais ici)
     
    cli
    push 0
    pop es
    mov si,74h
    shl si,2
    mov ax,[offset_IRQ12_original]
    mov [es:si],ax
    mov ax,[segment_IRQ12_original]
    mov [es:si+2],ax
    sti
     
    ret
     
    ;-----------------------
    souris:
     
    push ax
    push bx
    push cx
     
    mov ah,9
    mov al,'A'
    mov bh,0
    mov bl,2
    mov cx,1
    int 10h                 ;affiche 'A'
     
    mov cx,65535	;tempo
    A: loop A
     
    mov ah,9		
    mov al,' '
    mov bh,0
    mov bl,2
    mov cx,1
    int 10h                 ;efface 'A'
     
    pop cx
    pop bx
    pop ax
     
    iret
    ;-----------------------
    offset_IRQ12_original	resw	1
    segment_IRQ12_original	resw	1
    la lettre ne s'affiche que lors du premier mouvement de la souris,pas pour les suivants.
    Qu'est ce qui ne va pas ?

  2. #2
    Membre chevronné Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Par défaut
    il suffit de dire a la puce qui gère les IRQ que celle ci a bien été traité sinon la puce en question ne génèrera pas l'irq12 la fois suivant croyant que la précédente n'aurait pas été traité, la puce en question s'appelle PIC(programmable interrupt controller)

    c'est assez simple a faire il suffit d'envoyer une commande a la puce, un simple octet a envoyer sur un port d' E/S, mais je ne me souviens plus lequel exactement

    par contre il y a deux PIC qui gère chaqun 8 irq, il faut bien faire attention a envoyer l'aquitement de l'irq a la bonne puce

  3. #3
    Membre averti

    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : passionné
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 29
    Par défaut
    Meci pour ta réponse Bifur,je vais chercher dans cette direction.
    Bonne prog.

  4. #4
    Membre averti

    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : passionné
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 29
    Par défaut
    j'ai trouvé l'info;

    acquittement d'une irq;
    toutes irq (sauf 8 à 15)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mov al,20h
    out 20h,al
    irq de 8 à 15; (pic escalve)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mov al,20h
    out 0A0h,al
    out 20h,al
    Mais ça ne marche toujours pas.Que je mette ces "out" en début ou en fin de ma routine,ça m'affiche la lettre 'A' sans l'effacer et puis ça bloque ???

  5. #5
    Membre chevronné Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Par défaut
    je dirait que c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov cx,65535	;tempo
    A: loop A
    qui se met en boucle infinie, mais je ne connait pas suffisament l'instruction loop pour être affirmatif sur ce point

    a la place j'essayerais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mov cx,65535
    tempo:
    dec cx
    jnz tempo
    par contre je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mov ah,9		
    mov al,' '
    mov bh,0
    mov bl,2
    mov cx,1
    int 10h                 ;efface 'A'
    n'efface pas A mais ajoute un espace juste après A, je dit ça de mémoire j'en suis pas sur

  6. #6
    Membre Expert
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    Bonjour,

    Ce n'est peut-être pas la cause du problème, mais à ta placé j'éviterais
    d'utiliser une int dans une int.

    essayes d'écrire ton caractère directement en accès mémoire.
    pas dur en mode texte, segment = B800h
    1er octet = code ASCII
    2eme octet = couleur (ne pas laisser à 00h sinon on voit rien ! )

    j'attends de tes news

    à plus François

Discussions similaires

  1. [TASM] Détournement d'interruption
    Par adrien_najaque dans le forum x86 16-bits
    Réponses: 12
    Dernier message: 24/05/2008, 13h23
  2. Méthodes de détournement de trafic
    Par Diody dans le forum Développement
    Réponses: 5
    Dernier message: 10/11/2006, 14h48
  3. Détournement des touches
    Par mappy dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 07/08/2006, 21h05
  4. Détournement d'une interruption
    Par Invité dans le forum Assembleur
    Réponses: 18
    Dernier message: 16/02/2005, 13h49
  5. Proxy, tunneling, détournement de firewall
    Par Davide dans le forum Développement
    Réponses: 19
    Dernier message: 08/10/2003, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo