2017-06-22 2 views
0

Voici une ligne de code d'assemblage provenant d'un fichier core.Instruction MOV avec un décalage

0x00002ac8c957012d <+45>: mov 0x8(%rsp), %rsi 

je remarquai que rsp de registre est à l'emplacement suivant donc j'utiliser la commande Examiner pour afficher le contenu, plus 16 autres objets/octets.

> x/16x 0x2acd5752a610 
0x2acd5752a610: 0x70 0xa6 0x11 0xff 0x29 0xcd 0x22 0x00 
0x2acd5752a618: 0x33 0xee 0xf1 0xa9 0xb2 0xcc 0x34 0x76 

Lors de déterminer le décalage de 0x8 cela va être 0 en fonction de la valeur résultant étant 0x33 ou tout simplement compter en commençant par 1 à 8 depuis le début qui se traduit par la valeur étant 0x00?

+2

RER est un registre, pas un registre ... Et ce que vous dit que RSP contient 0x2ac8c957012d ... qui est l'adresse de l'instruction 'mov' . –

+1

vous chargez en RSI, un registre de 64 bits, donc 8 octets seront chargés, pas 1. – ilkkachu

+0

Si la valeur dans 'rsp' est' 0x2acd5752a610', alors 8 octets commençant à '0x2acd5752a618' seront chargés dans' rsi ', ie l'octet de poids faible (' sil') sera en effet '0x33', mais tout le' rsi' sera chargé, y compris après 7 octets 'ee f1 ...'. Le '0x00' est '' [rsp + 7] ', non impliqué. – Ped7g

Répondre

2

Vous êtes confus par l'abomination de Braindead qui est AT & T syntaxe.

Dans Intel la syntaxe destinée mov 0x8(%rsp), %rsi se traduit par:

mov rsi,[rsp+8] 

Ce qui signifie remplir les 8 octets de registre rsi avec les 8 octets à l'adresse [rsp+8].
Notez que rsp est un registre de 64 bits (8 octets) qui gère 8 octets à la fois. Nous ne savons pas quelle est la valeur de rsp, mais nous savons que rsp est le pointeur de la pile et +8 signifie que nous prenons l'adresse 8 octets au-dessus du pointeur de la pile, ou la deuxième valeur la plus récemment poussée sur la pile (parce que la pile se développe vers le bas).

Cette instruction est faufilant un pic dans la pile :-)

+0

Merci, vous avez également répondu à la question de suivi que j'ai posté que la nouvelle valeur est en fait une nouvelle adresse de registre pour rsi dans lequel une certaine valeur existe. –