Ich schreibe einen JIT-Compiler (nur 64-Bit, Windows). Ich muss auf Variablen des C++ Programms zugreifen, durch Verweis (Zeiger).C++ Zeiger in 64-Bit-Anweisungen
Beispiel: eine 32-Bit-Ganzzahl aus dem Speicher zu einem 32-Bit-Register Hinzufügen, unter Verwendung dieser Anweisung:
opcode "03 /r" : ADD r32, m32. (valid in 64bit mode)
leider dies für eine 32-Bit-Verschiebung wird gefragt, aber ich (? Nur) einen 64-Bit-Zeiger auf die C++ Variable.
Meine Frage: Gibt es einen Weg, eine 32bit Verschiebung von einem 64bit C++ Zeiger zu bekommen?
Oder wenn nicht, allgemeiner, wie würde ich C++ - Variablen adressieren?
Ich habe auch versucht, den Zeiger Wert auf Rax bewegen und indirekte Adressierung [Rax] verwenden. Was auch nicht zu funktionieren scheint.
Ich habe irgend dis-Montage (Klirren) sah, und es scheint, RIP (relative Befehlszeiger), wie
mov dword ptr [rip + test], 2358
Welche seltsam scheint, als rip Änderungen auf jede Anweisung zu verwenden (wie Soweit ich weiß).
Alle Hinweise in die richtige Richtung würden sehr geschätzt werden.
Edit: Indirekte Adressierung durch, [Rax], funktioniert jetzt! Ich hatte einen Fehler in der C++. Immer noch kein Glück mit 32-Bit-Adressierung.
Warum können Sie keine 64-Bit-Anweisung verwenden? –
32-Bit-Integer- oder sogar 8-Bit-Anweisungen sind im 64-Bit-Modus perfekt gültig und nützlich. Nur die Zeiger (Speicheradresse) sind 64Bit. –
Das habe ich nicht gefragt. Ich wiederhole: Warum können Sie keine 64-Bit-Anweisung verwenden? –