Quelle est la différence entre x64 et x86 sous Linux

青灯夜游
Libérer: 2022-01-11 18:03:14
original
9596 Les gens l'ont consulté

Différences : 1. Allocation de registre différente, x64 a 16 registres, x86 n'a que 8 registres ; 2. Différentes instructions d'assemblage ; 3. Différents appels de fonction ; 5. Différents cadres de pile, x64 n'a pas de cadres de pile ; pointeur, tandis que x86 utilise ebp comme pointeur de trame de pile ; 6. La vitesse de calcul de x64 est supérieure à celle de x86.

Quelle est la différence entre x64 et x86 sous Linux

L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.

La différence entre Linux x86 (32 bits) et x64 (64 bits)

0x01 : Différence dans l'allocation des registres

(1) 64 bits a 16 registres, 32 bits seulement 8. Mais les 8 premiers bits de 32 bits ont des noms différents, à savoir e_, tandis que les huit premiers bits de 64 bits utilisent r au lieu de e, qui est r_. Les noms de registre commençant par e peuvent toujours être directement appliqués aux 32 bits inférieurs du registre correspondant, tandis que les noms de registre restants vont de r8 à r15, et les bits inférieurs sont désignés respectivement par d, w et b ; 32 bits utilise le cadre de pile comme emplacement de stockage des paramètres transmis, tandis que 64 bits utilise des registres, en utilisant respectivement rdi, rsi, rdx, rcx, r8, r9 comme paramètres 1 à 6 et rax comme valeur de retour. ;
(3) 64 bits n'a pas de pointeur de trame de pile, 32 bits utilise ebp comme pointeur de trame de pile, 64 bits annule ce paramètre et rbp est utilisé comme registre général
(4) 64 bits ; prend en charge certaines formes d'adressage liées au PC, tandis que 32 bits ne prend en charge que jmp. Cette méthode d'adressage ne sera utilisée que lorsque :

0x02 : (Nouveau) Instructions d'assemblage différentes

mov, push, pop développe la série movq de mov et pushq et popq Utilisé pour faire fonctionner quatre mots.

Supplément :

(1) movabsq n'est pas une extension 32 bits, c'est une instruction purement nouvelle. Utilisé pour stocker une valeur littérale de 64 bits directement dans un registre de 64 bits. Parce que movq ne peut stocker que des valeurs 32 bits, une nouvelle instruction comme celle-ci est ajoutée

(2) Le code assembleur 64 bits peut ajouter un rep avant ret Le rep ici n'a aucune signification pratique, juste pour le bien de The. La raison pour laquelle le processeur AMD est d'éviter l'endroit où jmp atteint directement ret, ce qui rendra le processeur plus rapide

0x03 : Différences dans les appels de fonction

(1) Les paramètres de x_64 sont transmis via des registres ( Voir ci-dessus);

callq stocke une adresse de retour de 8 bits sur la pile ;
(2) De nombreuses fonctions n'ont plus de cadres de pile, et seules celles qui ne peuvent pas placer toutes les variables locales dans les registres alloueront de l'espace sur la pile ; ) La fonction peut obtenir jusqu'à 128 octets d'espace de pile. De cette façon, la fonction peut stocker des informations sur la pile sans changer le pointeur de pile (c'est-à-dire que l'espace de 128 octets sous rsp peut être utilisé à l'avance. Cet espace est appelé la zone rouge. Dans x86-64, il est disponible à tout moment. );
(4) Il n'y a plus de pointeur de cadre de pile, et la position de la pile est désormais liée au pointeur de pile. La plupart des fonctions allouent tout l'espace de pile requis au début de l'appel, puis gardent le pointeur de pile inchangé
(5) Certains registres sont conçus pour être des registres stockés par l'appelé, et ceux-ci doivent être stockés lorsque leurs valeurs doivent être modifiés et restaurés-les ensuite.

0x04 : Différences dans le passage des paramètres (1) 6 registres sont utilisés pour passer les paramètres (voir ci-dessus

(2) Les registres restants sont passés comme avant (mais liés à rsp, ebp n'est pas) ; n'est plus utilisé comme pointeur de cadre de pile, et le 7ème paramètre commence à rsp, le 8ème paramètre commence à rsp+8, et ainsi de suite)

(3) Lorsqu'il est appelé, rsp descend de 8 bits (stocké dans l'adresse de retour) ; , les paramètres du registre n'ont aucun effet, le 7ème et les paramètres suivants sont désormais le 7ème à partir de rsp+8, le 8ème à partir de rsp+16, et ainsi de suite

0x05 : La différence dans les cadres de pile  ; Dans de nombreux cas, le cadre de pile n'est plus nécessaire. Par exemple, si aucune autre fonction n'est appelée et que le registre suffit à stocker les paramètres, seule l'adresse de retour doit être stockée.

Situations où un cadre de pile est nécessaire :


(1) Il y a trop de variables locales et pas assez de registres ;

(2) Certaines variables locales sont des tableaux ou des structures ;

(3) La fonction utilise l'opérateur d'adresse pour calculer le valeur d'une variable locale Adresse ;
(4) La fonction doit utiliser la pile pour transférer certains paramètres vers une autre fonction ;
(5) La fonction doit sauvegarder l'état de certains registres stockés par l'appelé (pour une récupération facile) ;
Mais maintenant, le cadre de pile est souvent de taille fixe, défini au début de l'appel de fonction. Pendant tout l'appel, le pointeur supérieur de la pile reste inchangé, de sorte que la valeur correspondante puisse être exploitée en y ajoutant un décalage, donc. EBP N'est plus nécessaire comme pointeur de trame de pile. Bien que nous pensions souvent qu'il n'y a pas de « cadre de pile », chaque appel de fonction doit avoir une adresse de retour qui est poussée sur la pile. Nous pouvons également considérer cette adresse comme un « cadre de pile » car elle enregistre également l'état de l'appelant.

0x06 : Différentes vitesses de fonctionnement

La largeur des données du processeur 64 bits est de 64 bits et le jeu d'instructions 64 bits peut exécuter des instructions de données 64 bits, ce qui signifie que le processeur peut extraire des données 64 bits. à la fois, supérieur à 32 bits. Doubler les performances augmentera théoriquement les performances d'un facteur 1.

Recommandations associées : "Tutoriel vidéo Linux"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal