2011-06-10 2 views

Répondre

2

Non, c'est une valeur immédiate. pushq pousse une valeur sur la pile, qui peut être un registre, mais vous trouverez qu'ils sont désignés par des opérandes comme %rbx.

Le $0x1a est une valeur immédiate - vous pouvez le dire aussi par la longueur de cette instruction (cinq octets, de x+6 à x+10). L'instruction pushq est capable de pousser un registre, un contenu de mémoire (64 bits) ou une valeur immédiate de 32 bits (signe étendu à 64 bits).

Dans ce cas, les cinq octets sont l'opcode 0x68 avec la valeur de 32 bits à pousser. Si vous deviez examiner la mémoire, cela ressemblerait probablement à 0x68 0x1a 0x00 0x00 0x00.

Et ne vous laissez pas berner par ce code, ce n'est pas le "vrai" appel read du tout. Il s'agit d'un stub utilisé pour corriger les références au moment de l'exécution où les sections de code peuvent être partagées entre les processeurs, même à différentes adresses de base. Le PLT est un stub par processus à faible encombrement qui saute au code partagé réel la première fois, en se corrigeant dans le processus, de manière à y sauter directement dans le futur. Voir here pour une explication de ce processus.

+0

Donc '$ 0x1a' est en effet un registre,'% rbx' est spécifique? – cpuer

+1

Non, '$ 0x1a' n'est pas un registre, c'est une valeur immédiate de' la' hexadécimal (décimal 26) l'indicateur de fin de fichier pour Windows et ses prédécesseurs. – paxdiablo

+0

Donc je peux imaginer qu'il y a d'autres appels similaires, que ce soit finalement le même appel système, mais avec un paramètre différent comme '$ 0x1a'? – cpuer

0

Les registres n'ont pas (habituellement) d'emplacement mémoire, ils sont un registre CPU.

+0

Quand nous disons registre, nous ne voulons rien dire d'autre que le registre CPU, non? – cpuer

+0

Non, un "registre" peut signifier d'autres choses selon le contexte, mais si le contexte est un assemblage de bas niveau, alors oui, c'est presque toujours un registre CPU. – Arafangion

0

Non encore mentionné, mais le signe $ principal indique une constante. C'est aussi simple que cela en regardant les décharges d'assemblage. Un simple piège: lorsque vous regardez une benne de fichiers binaires non liés, ne vous laissez pas tromper par 0x00000000 un peu partout. Sans le premier $, ce sont des relocations de liens, pas des valeurs 0 constantes.