Danke mal für eure zahlreichen Antworten:
@juergenkulow
Interessanter Code. Hab mich schon mal ein bisschen damit rumgespielt, damit ich überhaupt kapiere um was es da geht. Ob ich es dann auch so mache, kann ich noch nicht sagen, auf jeden Fall will ich mal ein paar Tests machen.
Code: Alles auswählen
MOV rsp,rsp_reg
MOV rax,rip_reg
JMP rax ; Springe zur Fehlerbehandlung
Was ich noch nicht verstehe, warum stellst du die Sprungadresse zuerst in ein Register? Würde der folgende Code nicht das gleiche machen?
@GPI
Ja, das war mir schon klar geworden, dass ohne
EndProcedure / ProcedureReturn ein paar Probleme auftauchen könnten. Ich muss mir mein eigenes Programm mal genauer ansehen, ich glaube, dass in den betroffenen Prozeduren keine Array, Lists und Maps erstellt werden. Da wird nur Daten aus der bereits geöffneten Datei gelesen und diese Daten dann in aufbereiteter Form in globale Listen und Maps gestellt. Lokale Variablen dürften nach meiner Meinung ja kein Speicherleck hinterlassen, wenn ich die Prozedur ohne
EndProcedure bzw.
ProcedureReturn verlasse
(Wichtig: Falls ihr anderer Meinung seid, bitte posten). Zur Zeit habe ich das auch über ein Macro gelöst, um die Rücksprünge möglichst übersichtlich zu halten. Wie schon zu Jürgen gesagt, ich muss mir das ganze mit ASM erst mal ansehen.
@¯\_(ツ)_/¯
Bitte erschlag mich nicht, wenn es nicht stimmt. Habe auch keine Ahnung von ASM und hab mich auch erst ein wenig einlesen müssen:
Code: Alles auswählen
MOV rsp,rsp_reg ; Setzt den Stackpointer auf die vorher gemerkte Adresse zurück
MOV rax,rip_reg ; Stellt die Sprungadresse ins Register rax
JMP rax ; Springe zur Fehlerbehandlung