Ce n'qword ptr [hexvalue], sans un de la base de registre
J'ai été le débogage du code CLR dans l'assemblée, et a obtenu une ligne de
mov rax, qword ptr [ff4053c0h]
Je pense que qword ptr [ff4053c0h]
fait référence à une chaîne qui m'intéresse, mais ff4053c0h
n'est pas valide emplacement de la mémoire. La lecture sur qword ptr
il semble faire référence à une adresse basée sur un registre de base (par exemple, qword ptr [rsp+30h]
est de 30 octets dans la pile), mais je ne trouve pas ce que c'est-à-dire de la base de registre.
C'est en se référant à l'emplacement de l'adresse pointée par
ff4053c0h
comme un quad mot (64 bits). Quelle que soit la valeur de 64 bits est à cette adresse sera chargé dans rax
. Si l'adresse n'est pas valide, alors il y a un problème. Êtes-vous sûr que c'est pas valide?OriginalL'auteur Rattle | 2015-07-03
Vous devez vous connecter pour publier un commentaire.
Quand pas de la base de registre ne sont fournies qu', cela signifie
data segment
(http://www.osdata.com/system/physical/memory.htm). Dans votre code,mov rax, qword ptr [ff4053c0h]
signifie "prendre de 8 octets de données de segment décalage FF4053C0h et les mettre dans RAX".Comme vous le signaler correctement, la présence d'un registre de base comme
rsp
indique clairement le segment de pile. Dans votre cas, pas de la base de registre moyens de segment de données.Maintenant, sur le grand nombre "FF4053C0h", qui est "4 282 405 824", il est parfaitement possible d'avoir 4 go de mémoire adressable (http://wiki.osdev.org/Protected_Mode), ce qui confirme que votre ligne de code est peut-être valable et il accède à compenser FF4053C0h dans un énorme segment de données (http://www.ece.unm.edu/~jimp/310/slides/micro_arch2.html).
Une autre source = Assemblée: en Utilisant les Données du Registre de Segment (DS) .
le système d'exploitation est susceptible de protéger la mémoire de été consulté par d'autres processus, de sorte que ces processus ne peuvent pas voir la mémoire protégée.
OriginalL'auteur Jose Manuel Abarca Rodríguez
Sans compliquer les choses pour aucune bonne raison:
Cela signifie qu'un 64 bits valeur est lue à partir de l'adresse
0ff4053c0h
dans le registreRAX
.L'adresse doit être valide, vérifiez de nouveau.
Le
QWORD PTR
est juste un spécificateur de taille (ici redondant, mais il améliore la lisibilité), il n'est pas lié au fait d'avoir un registre de base.Si vous êtes vraiment intéressé dans les différents modes d'adressage du PROCESSEUR, vous pouvez lire les Manuels Intel (Google).
OriginalL'auteur
Le déplacement de la 64 bits de la valeur de la mémoire dans le registre rax. La valeur est lue à partir de l'adresse ff4053c0h. qword ptr est un indice pour les assembler pour créer un mouvement de l'op-code (code machine) à l'aide d'un 64bit constante de l'adresse. La valeur fournie est un 32 bits valeur (8 chiffres hexadécimaux => 8 fois un hex-chiffre/lettre => 8 * 4bits => 32 bits).
Il y a déplacer op-codes qui prennent en charge 32 bits opérations mais (probablement vérifier les spécifications pour le CPU/Mode) pas pour le chargement de la mémoire dans un registre 64 bits. Donc, qword est nécessaire pour assurer l'assembleur que vous voulez vraiment pour exprimer un 64 bits de l'adresse.
Pour votre commentaire sur l'adresse pointant à mémoire non défini (voir les commentaires pour lu de réponse), de comprendre qu'aujourd'hui, chaque processus dispose d'une mémoire virtuelle tableau attribué. La mémoire virtuelle fondamentalement cartes une adresse logique à une adresse en mémoire réelle. Il empêche les processus de le voir et d'en altérer la mémoire qui n'appartient pas au processus, en offrant une grande stabilité pour un système en cours d'exécution.
Avoir deux processus à la fois le partage d'une partie de la mémoire, il est possible que chaque processus, consultez la même mémoire physique à différentes adresses logiques. Le système d'exploitation décide de ce que la mémoire virtuelle de chaque processus ressemble.
La cartographie est fourni par niveau de la page (par exemple, page=4 KO) et le processeur effectue le mappage en interne.
Ce concept est très vrai pour les fichiers de mappage de la mémoire et de partage de la mémoire entre les différents processus. De cette façon, vous pouvez mapper un fichier de 2 go en mémoire, et 10 concurremment le processus de travail avec le même fichier mappé tout seul (au plus) de 2 go de mémoire réelle est consommé. C'est le chemin du fichier e /s-le cache est effectuée principalement sur le niveau de l'OS.
OriginalL'auteur Martin Kersten