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

Assembleur Discussion :

Relire du code dans la portion code


Sujet :

Assembleur

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut Relire du code dans la portion code
    Salut les "King" de l'assembleur....
    Une petite question du monde des Delphiistes
    Voici le code delphi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button2Click(Sender: TObject);
    var
        bidon:integer;
        LineNumber:dword;
    begin
        bidon:=1;
        Assert( bidon=1);
        asm
    @@bidon:
            mov al,@@bidon
            mov LineNumber,$0
        end;
    end;
    Voilà ce que le compilateur me donne en asm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    main.pas.59: bidon:=1;
    0044BE0C	C745F40100000	mov [ebp-$0c],$00000001
    main.pas.60 Assert(bidon=1);
    0044BE13	837DF401	cmp dword ptr [ebp-$0c],$01
    0044BE17	7414		jz TForm1.Button2Click+$2D
    0044BE19	B93C000000	mov ecx,$0000003c
    0044BE1E	BA48BE4400	mov edx,$0044be48
    0044BE23	BA48BE4400	mov eax,$0044be80
    0044BE28	E89B83FBFF	call @Assert
    main.pas.63 mov al,@@bidon
    0044BE2D	A02dbe4400	mov al,$0044be2d
    main.pas.64: mov LineNumber,$0
    0044BE32	C745FC0000000	mov [ebp-$04],$00000000
    j'aimerais savoir si je peux aller chercher la valeur
    mise par le compilateur dans ecx ($3c) en relisant le code en assembleur?

    autrement dit, j'aimerais aller relire à l'offset du label
    @@Bidon - $014 (la ligne en gras)
    et mettre $3c dans la variable LineNumber [ebp-$04]

    est-ce possible en assembleur?

    À noter que le résultat de cmp avant le jz sera toujours zéro et que donc,
    la ligne en gras n'est jamais executé.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 409
    Points
    59 409
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    J'ai quand même un peu de mal à comprendre ce que tu veux faire (la fatigue sans doute ).
    Suis-je à côté de la plaque ou bien cherches-tu à aller rechercher un octet dans une instruction qui se trouve $014 octets plus haut dans le code ?

    Si oui, je verrais un truc comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov esi,@@bidon
    mov dword ptr LineNumber,cs:[esi-$13]
    // $13 et pas $14 car $3C est le second octet du code machine
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par Alcatîz
    Suis-je à côté de la plaque ou bien cherches-tu à aller rechercher un octet dans une instruction qui se trouve $014 octets plus haut dans le code ?
    C'est en plein ça que je voulais faire!
    je ne peux tester avant demain...
    mais je crois bien que ce sera parfait!

    Gros Merci!
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    désolé, mais j'ai pas pu tester avant...
    Delphi 5 ne veux pas compiler...
    j'ai mis les erreurs en commentaire dans le code asm...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
        bidon:=1;
        Assert( bidon=1);
        asm
    @@bidon:
            mov esi,@@bidon  {Operand size mismatch}
            mov dword ptr LineNumber,cs:[esi-$13]  {Invalid combination of opcode and operands}
        end;
        button2.Caption:=IntToStr(LineNumber);
    end;
    à l'aide Alcatîz!
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    j'ai modifier comme ca et ca semble marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
        bidon:=1;
        Assert( bidon=1);
        asm
    @@bidon:
            mov EDX,offset @@bidon
            mov eax,cs:[EDX-$13]
            mov dword ptr LineNumber,eax
        end;
        button2.Caption:=IntToStr(LineNumber);
    end;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 24
    Dernier message: 27/01/2009, 09h18
  2. [C#]ajout code dans code behind
    Par liliprog dans le forum ASP.NET
    Réponses: 8
    Dernier message: 21/06/2005, 11h03
  3. [VBA Excel] Comment écrire un code dans le ThisWorkBook ?
    Par WebPac dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/05/2005, 15h03

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