Autor Thema: Im 64 Bit Modus einen Far jmp machen.  (Gelesen 4705 mal)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« am: 14. July 2006, 15:34 »
hi,

da der fasm im 64 Bit mode keinen Far jmp machen kann wollte ich fragen wie das manuell geht. Also ich meine fasm kann das nicht:

jmp Seg:Off

Und manuell weiß ich leider nicht wie das im 64 Bit Mode geht. Das funktioniert z.B. nicht:

db 0EAh
dq Off
dw Seg


Bis jetzt mache ich das so:

push Seg
push Off
retf


Aber das ich ja kein Far-jmp. Leider habe ich keine Infos dazu gefunden. Ich schätze man muss da noch prefixe reinmachen. Nur welche?

bitmaster
In the Future everyone will need OS-64!!!

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #1 am: 14. July 2006, 16:27 »
So, nach etlichem Suchen habe ich es nun doch selber gefunden. So geht es:

jmp far [jmp64]

jmp64:
dd Lmode1
dw 1 shl 3

Lmode1:
jmp $

bitmaster
In the Future everyone will need OS-64!!!

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 14. July 2006, 16:29 »
Hi,

ich gehe mal davon aus das du im LongMode arbeitest. Nun das Problem: da die Segementierung in diesem Modus abgeschafft wurde, gibt es keinen wirklichen 64bit far-jump! Deswegen wird sich auch FASM dagegen wehren! Ich wüsste auch nicht so wirklich wofür man den brauchen könnte. Dein RETF-Workaround ist fast die einzige Möglichkeit. Andererseits könntest du auch noch an eine im Speicher gehaltene Adresse springen (indirekter FarJump), allerdings nur mit 16/32Bit Offsets. Schau mal ins AMD64 Manual 3, da stehen die Instruktionen und die Einschränkungen drin.
Agieren statt Konsumieren!

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #3 am: 14. July 2006, 17:31 »
@n3Ro: Toll und ich such mich die ganze Zeit im AMD64 Manual 1 dusselig. ^^
In the Future everyone will need OS-64!!!

 

Einloggen