


Was ist der Unterschied zwischen x64 und x86 unter Linux?
Unterschiede: 1. Andere Registerzuordnung, x64 hat nur 8 Register; 3. Andere Funktionsaufrufe; 5. Andere Stack-Frames; Zeiger, während x86 ebp als Stapelrahmenzeiger verwendet. 6. Die Rechengeschwindigkeit von x64 ist höher als die von x86.
Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.
Der Unterschied zwischen Linux x86 (32-Bit) und x64 (64-Bit)
0x01: Unterschiede in der Registerzuordnung
(1) 64-Bit hat 16 Register, 32-Bit nur 8. Aber die ersten 8 Bits von 32-Bit haben unterschiedliche Namen, nämlich e_, während die ersten acht Bits von 64-Bit r anstelle von e verwenden, was r_ ist. Die mit e beginnende Registerbenennung kann weiterhin direkt auf die unteren 32 Bits des entsprechenden Registers angewendet werden, während die übrigen Registernamen von r8 bis r15 reichen und die unteren Bits jeweils mit d, w und b bezeichnet werden
(2) 32-Bit verwendet den Stapelrahmen als Speicherort für die übergebenen Parameter, während 64-Bit Register verwendet und rdi, rsi, rdx, rcx, r8, r9 jeweils als Parameter 1–6 und rax als Rückgabewert verwendet
(3) 64-Bit hat keinen Stack-Frame-Zeiger, 32-Bit verwendet ebp als Stack-Frame-Zeiger, 64-Bit hebt diese Einstellung auf und rbp wird als allgemeines Register verwendet; unterstützt einige Formen der PC-bezogenen Adressierung, während 32-Bit nur JMP unterstützt. Diese Adressierungsmethode wird nur verwendet, wenn: pop erweitert die movq-Reihe von mov und pushq und popq Wird zum Betreiben von Quad-Worten verwendet.
Ergänzung: (1) movabsq ist keine 32-Bit-Erweiterung, es ist eine völlig neue Anweisung. Wird verwendet, um einen 64-Bit-Literalwert direkt in einem 64-Bit-Register zu speichern. Da movq nur 32-Bit-Werte speichern kann, wird eine neue Anweisung wie diese hinzugefügt
callq speichert eine 8-Bit-Rückgabeadresse auf dem Stapel
(2) Viele Funktionen haben keine Stapelrahmen mehr und nur diejenigen, die nicht alle lokalen Variablen in Registern platzieren können, weisen Platz auf dem Stapel zu( 3 ) Die Funktion kann bis zu 128 Byte Stapelspeicher erhalten. Auf diese Weise kann die Funktion Informationen auf dem Stapel speichern, ohne den Stapelzeiger zu ändern (dh der 128-Byte-Bereich unter RSP kann im Voraus verwendet werden. Dieser Bereich wird als rote Zone bezeichnet. In x86-64 ist er verfügbar
(4) Es gibt keinen Stapelrahmenzeiger mehr und die Stapelposition hängt jetzt vom Stapelzeiger ab. Die meisten Funktionen weisen zu Beginn des Aufrufs den gesamten erforderlichen Stapelspeicher zu und lassen dann den Stapelzeiger unverändert(5) Einige Register sind als vom Aufrufer gespeicherte Register konzipiert und müssen gespeichert werden, wenn ihre Werte benötigt werden ändern und anschließend wiederherstellen.
0x04: Unterschiede in der Parameterübergabe
(1) 6 Register werden zur Parameterübergabe verwendet (siehe oben); (2) Die restlichen Register werden wie zuvor übergeben (jedoch bezogen auf rsp ist ebp nein). Wird länger als Stapelrahmenzeiger verwendet und der 7. Parameter beginnt bei rsp, der 8. Parameter beginnt bei rsp+8 usw. (3) Beim Aufruf bewegt sich rsp um 8 Bits nach unten (in der Rücksprungadresse gespeichert). , die Registerparameter haben keine Auswirkung, der 7. und die folgenden Parameter sind jetzt der 7. ab RSP+8, der 8. ab RSP+16 usw.
0x05: Der Unterschied in den Stapelrahmen
In vielen Fällen wird der Stapelrahmen nicht mehr benötigt. Wenn beispielsweise keine andere Funktion aufgerufen wird und das Register ausreicht, um Parameter zu speichern, muss nur die Rücksprungadresse gespeichert werden.
Situationen, in denen ein Stapelrahmen benötigt wird:
(1) Es gibt zu viele lokale Variablen und nicht genügend Register;
(2) Einige lokale Variablen sind Arrays oder Strukturen;
(3) Die Funktion verwendet den Adressoperator, um zu berechnen Wert einer lokalen Variablenadresse;
(5) Die Funktion muss den Status einiger vom Aufrufer gespeicherter Register speichern ; Aber jetzt hat der Stapelrahmen oft eine feste Größe, die zu Beginn des Funktionsaufrufs festgelegt wird. Während des gesamten Aufrufs bleibt der obere Zeiger des Stapels unverändert, sodass der entsprechende Wert durch Hinzufügen eines Offsets bedient werden kann EBP wird nicht mehr als Stack-Frame-Zeiger benötigt. Obwohl wir oft denken, dass es keinen „Stapelrahmen“ gibt, muss jeder Funktionsaufruf eine Rücksprungadresse haben, die auf den Stapel gelegt wird. Wir können uns diese Adresse auch als „Stapelrahmen“ vorstellen, da sie auch den Status des Aufrufers speichert. 0x06: Unterschiedliche Betriebsgeschwindigkeiten Verwandte Empfehlungen: „Linux-Video-Tutorial“
Die Datenbreite der 64-Bit-CPU beträgt 64 Bit, und der 64-Bit-Befehlssatz kann 64-Bit-Datenanweisungen ausführen, was bedeutet, dass der Prozessor 64-Bit-Daten extrahieren kann zu einem Zeitpunkt, der höher als 32-Bit ist. Eine Verdoppelung der Leistung führt theoretisch zu einer Leistungssteigerung um den Faktor 1.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen x64 und x86 unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Verwenden Sie Python im Linux -Terminal ...

Konfigurieren Sie die Timing -Timing -Timing -Timing -Timing auf der MacOS -Plattform, wenn Sie die Timing -Timing -Timing -Timing von APScheduler als Service konfigurieren möchten, ähnlich wie bei NGIN ...

Multithreading in der Sprache kann die Programmeffizienz erheblich verbessern. Es gibt vier Hauptmethoden, um Multithreading in C -Sprache zu implementieren: Erstellen Sie unabhängige Prozesse: Erstellen Sie mehrere unabhängig laufende Prozesse. Jeder Prozess hat seinen eigenen Speicherplatz. Pseudo-MultitHhreading: Erstellen Sie mehrere Ausführungsströme in einem Prozess, der denselben Speicherplatz freigibt und abwechselnd ausführt. Multi-Thread-Bibliothek: Verwenden Sie Multi-Thread-Bibliotheken wie PThreads, um Threads zu erstellen und zu verwalten, wodurch reichhaltige Funktionen der Thread-Betriebsfunktionen bereitgestellt werden. Coroutine: Eine leichte Multi-Thread-Implementierung, die Aufgaben in kleine Unteraufgaben unterteilt und sie wiederum ausführt.

Um eine Web.xml -Datei zu öffnen, können Sie die folgenden Methoden verwenden: Verwenden Sie einen Texteditor (z.

In Bezug auf das Problem der Entfernung des Python -Dolmetschers, das mit Linux -Systemen ausgestattet ist, werden viele Linux -Verteilungen den Python -Dolmetscher bei der Installation vorinstallieren, und verwendet den Paketmanager nicht ...

Linux wird am besten als Serververwaltung, eingebettete Systeme und Desktop -Umgebungen verwendet. 1) In der Serververwaltung wird Linux verwendet, um Websites, Datenbanken und Anwendungen zu hosten und Stabilität und Zuverlässigkeit bereitzustellen. 2) In eingebetteten Systemen wird Linux aufgrund seiner Flexibilität und Stabilität in Smart Home und Automotive Electronic Systems häufig verwendet. 3) In der Desktop -Umgebung bietet Linux reichhaltige Anwendungen und eine effiziente Leistung.

Debianlinux ist bekannt für seine Stabilität und Sicherheit und wird in Server-, Entwicklungs- und Desktop -Umgebungen häufig verwendet. Während es derzeit einen Mangel an offiziellen Anweisungen zur direkten Kompatibilität mit Debian und Hadoop gibt, wird dieser Artikel Sie dazu veranlassen, Hadoop in Ihrem Debian -System bereitzustellen. Debian -Systemanforderungen: Bevor Sie mit der Hadoop -Konfiguration beginnen, stellen Sie bitte sicher, dass Ihr Debian -System die Mindestanforderungen von Hadoop erfüllt, einschließlich der Installation der erforderlichen Java -Laufzeitumgebung (JRE) und Hadoop -Pakete. Schritte zur Bereitstellung von Hadoop -Bereitstellungen: Download und Unzip Hadoop: Laden Sie die Hadoop -Version von der offiziellen Apachehadoop -Website herunter und lösen Sie sie

"DebianStrings" ist kein Standardbegriff und seine spezifische Bedeutung ist noch unklar. Dieser Artikel kann seine Browserkompatibilität nicht direkt kommentieren. Wenn sich jedoch "DebianStrings" auf eine Webanwendung bezieht, die auf einem Debian -System ausgeführt wird, hängt seine Browserkompatibilität von der technischen Architektur der Anwendung selbst ab. Die meisten modernen Webanwendungen sind für die Kompatibilität des Cross-Browsers verpflichtet. Dies beruht auf den folgenden Webstandards und der Verwendung gut kompatibler Front-End-Technologien (wie HTML, CSS, JavaScript) und Back-End-Technologien (wie PHP, Python, Node.js usw.). Um sicherzustellen, dass die Anwendung mit mehreren Browsern kompatibel ist, müssen Entwickler häufig Kreuzbrowser-Tests durchführen und die Reaktionsfähigkeit verwenden
