2017-05-26 1 views
1

J'ai les commandes montage suivant:Comment mov eax stocke-t-il des données en mémoire?

mov eax, 10001 
mov [eax], DEADCODEh 

Ce que je sais est

  • Je parle de X86
  • eax a 32 Bits
  • Je dois garder peu endian à l'esprit

Alors, à quoi ressemble la mémoire? Le numéro hexadécimal entier est-il stocké à 10001 ou seulement une partie de celui-ci? En fonction de cela, à quoi ressemblent les adresses 10002, 10003 et 10004?

+0

Pourquoi vous essayez et trouvez pas? – Iridium

Répondre

3

Le code fait la chose suivante:

  1. Charge eax avec la valeur 10001 (décimal). C'est 0x2711 en hexadécimal. La valeur de eax est maintenant 0x00002711. Notez les zéros en tête comme eax est un registre de 32 bits.
  2. Stockez la valeur 0xdeadc0de (notez le 0, que vous avez incorrectement copié/collé) en mémoire à l'adresse contenue dans eax. Étant donné que l'ordre des octets est peu endian, la mémoire autour de 10001 va avoir le contenu suivant:

    10001: 0xde 
    10002: 0xc0 
    10003: 0xad 
    10004: 0xde 
    
+0

Merci beaucoup. Maintenant je suis confus. Je pensais que petit boutiste signifie valeur d'adresse élevée attribuée à la valeur à faible chiffre? – isecstud

+1

@isecstud Nope. Ce serait un gros boutiste. Little endian signifie que l'octet le moins significatif vient en premier. Voir [Wikipedia] (https://fr.wikipedia.org/wiki/Endianness#Little) pour plus de détails. N'oubliez pas de marquer la réponse comme acceptée une fois que votre problème a été résolu. – fuz

+0

Merci beaucoup. Maintenant j'ai marqué ma question comme résolue par votre réponse. – isecstud