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 32-bits / 64-bits Assembleur Discussion :

Un code AT&T


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Un code AT&T
    Bonjour,

    Etudiant toujours AT&T, je voudrais comprendre un code asm.
    En C, cela donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int triangle (int width, in height){
     
    int array[5] = {0,1,2,3,4};
    int area;
    area = width * height/2;
    return (area);
     
    }
    et en AT&T:

    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
     
    0x8048430 <triangle>:      push    %ebp  
    0x8048431 <triangle+1>:    mov     %esp, %ebp
    0x8048433 <triangle+3>:    push    %edi
    0x8048434 <triangle+4>:    push    %esi
    0x8048435 <triangle+5>:    sub     $0x30,%esp
    0x8048438 <triangle+8>:    lea     0xffffffd8(%ebp), %edi
    0x804843b <triangle+11>:    mov    $0x8049508,%esi
    0x8048440 <triangle+16>:    cld
    0x8048441 <triangle+17>:    mov    $0x30,%esp
    0x8048446 <triangle+22>:    repz movsl    %ds:( %esi), %es:( %edi)
    0x8048448 <triangle+24>:    mov    0x8(%ebp),%eax
    0x804844b <triangle+27>:    mov    %eax,%edx
    0x804844d <triangle+29>:    imul   0xc(%ebp),%edx
    0x8048451 <triangle+33>:    mov    %edx,%eax
    0x8048453 <triangle+35>:    sar    $0x1f,%eax
    0x8048456 <triangle+38>:    shr    $0x1f,%eax
    0x8048459 <triangle+41>:    lea    (%eax, %edx, 1), %eax
    0x804845c <triangle+44>:    sar    %eax
    0x804845e <triangle+46>:    mov    %eax,0xffffffd4(%ebp)
    0x8048461 <triangle+49>:    mov    0xffffffd4(%ebp),%eax
    0x8048464 <triangle+52>:    mov    %eax,%eax
    0x8048466 <triangle+54>:    add    $0x30,%esp
    0x8048469 <triangle+57>:    pop    %esi
    0x804846a <triangle+58>:    pop    %edi
    0x804846b <triangle+59>     pop    %ebp
    0x804846c <triangle+60>:    ret
    Alors je retrouve des lignes connues mais je ne suis pas encore un habitué.
    Je vous remercie de votre aide.


    question 1
    A <triangle+8>
    Sachant qu'EDI est un registre DATA, pourquoi lui donner la valeur d'un DWORD dans la pile?

    question 2
    A <triangle+8>
    On fait pointer EDI sur EBP - 5 octets, donc sur le premier bit du 2nd octet de ESI? (0xffffffd8 = - 50 octal et ESI,EDI font 4 octets chacun)

    question 3
    A <triangle+11>
    Qu'est ce que l'adresse 0x8049508 donnée par gdb? Cette ligne n'est pas dans le code.

    Je guette vos réponses.

  2. #2
    Invité
    Invité(e)
    Par défaut
    J'ai trouvé les reponses

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

Discussions similaires

  1. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  2. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  3. Explorateur de code C
    Par Zero dans le forum C
    Réponses: 14
    Dernier message: 06/06/2002, 09h41
  4. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

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