Commutateur Cas De L'Assemblée De La Langue

Je suis en train de regarder le code de langage d'assemblage d'une instruction switch.

Je comprends comment le code fonctionne et quels sont les cas sont. Ma question est comment puis-je décider sur le cas des noms?

Ci-dessous est le code de langage d'assemblage, qui sera suivie par mon interprétation de la chose. En gros, j'ai juste besoin d'utiliser le saut de la table et de le remplir dans le cas des noms.

    1 8048420: push %ebp
    2 8048421: mov %esp, $ebp
    3 8048423: mov 0x8(%ebp), %eax       //x
    4 8048426: mov 0xc(%ebp), %edx       //n
    5 8048429: sub $0x32, %edx           //so least value of case is 32
    6 804842c: cmp $0x5, %edx            //max value is 37
    7 804842f: ja 8048448 <switch+0x28>  //if >37, go to default
    8 8048431: jmp *0x80485d0(, %edx, 4)  //THIS RIGHT HERE ?
    9 8048438: shl $0x2, %eax             //CASE A
   10 804843b: jmp 804844b <switch+0x2b>  //break;
   11 804843d: sar $0x2, %eax             //CASE B
   12 8048440: jmp 804844b <switch+0x2b>  //break
   13 8048442: lea (%eax, %eax, 2), %eax  //CASE C
   14 8048445: imul %eax, %eax     
   15 8048448: add $0xa, %eax             //fall through to default
   16 804844b: pop %ebp                   //return
   17 804844c: ret

Le saut de la table que la commande gdb crée:
Je suis en train de faire x/6w 0x80485d0

0x80485d0: 0x08048438 0x08048448 0x08048438 0x0804843d
0x80485e0: 0x08048442 0x08048445

Mon interprétation:

int result = x;
switch(n) {
case __:
    x = x << 2;
    break;  
case __:
    x = x >> 2
    break;
case __:
    x = 4*x;
    x = x*x
case __: //default
    x += 0xa 
return x;
}

Je ne comprends juste pas comment faire pour regarder le saut de la table et de décider quelles valeurs de n entre 32 et 37 ajustement dans lequel de l'affaire des blancs.

Toute aide serait appréciée.
Merci.

Notez que 0x32 est de 50, pas 32.
Je ne suis pas sûr de comprendre la question; vous avez déjà fait le travail! Le premier élément de la table de saut correspond à 0x32, la deuxième à 0x33, et ainsi de suite.
Ne pas le x=4*x être x=3*x (ou, plus précisément, x=x+2*x)?

OriginalL'auteur Catie | 2010-10-24