Comment sscanf travail? (l'assemblée)
Je suis en train d'essayer de décoder certains code assembleur généré à partir d'un fichier binaire. Il y a un appel à la sscanf
fonction dans le code:
400f08: e8 13 fc ff ff callq 400b20 <sscanf@plt>
400f0d: 89 45 fc mov %eax,-0x4(%rbp)
Pouvez-vous me dire comment sscanf
travaux de l'assemblée? Je suis sûr que le nombre d'arguments est stocké dans %eax
....est-il pousser l'entrée dans la pile dans l'ordre inverse? Donc, dire que mon entrée est 0 1
, après l'exécution de sscanf, %eax
=2 et la pile ressemble:
1
0 <----%rsp (top of the stack)
Est-ce correct?
Merci!
OriginalL'auteur pauliwago | 2012-10-27
Vous devez vous connecter pour publier un commentaire.
Suivre la convention d'appel de la plate-forme, comme d'habitude. Linux 32 bits utilise cdecl par défaut, ce qui vous a pousser tous les arguments sur la pile dans l'ordre inverse. 64-bit Linux utilise le Système V AMD64 ABI convention, qui utilise
RDI
,RSI
,RDX
,RCX
,R8
, etR9
pour les entiers et les adresse et les registres XMM pour virgule flottante arguments (avec surplus arguments d'aller sur la pile).Le nombre d'arguments n'est pas poussé n'importe où, autant que je sache
sscanf
détermine ce à partir de la chaîne de format (même si je suis heureux d'être corrigé). Le Système V AMD64 ABI (64 bits) ne spécifier queAL
est utilisé pour stocker le nombre de registres XMM utilisé (de 0 à 8), mais qui s'applique à virgule flottante arguments (qui ne doivent jamais être des arguments àsscanf
).OriginalL'auteur atomicinf
sscanf
prend comme argument une chaîne de scan, une chaîne de format, et pointeurs à des variables de l'endroit où stocker les résultats de l'analyse. Donc, votre 0 et 1 les chiffres seraient stockées sur les variables correspondantes, en supposant que l'analyse a été couronnée de succès.EAX
contient la valeur de retour. Le*scanf
famille de fonctions renvoient le nombre d'éléments analysés avec succès, de sorte que vous pouvez savoir si l'analyse a été un succès, et comment il était réussie.OriginalL'auteur ninjalj