CALL Aufruf
-
Hi,
Eine Funktion wird folgendermaßen aufgerufen:
call @ILT+450(_meinefunktion) (0EB11C7h)
1. Kann mir einer erklären, was es mit "@ILT+450" genanu auf sich hat?
und
2. Kann ich die Funktion nicht über eine Art "Label" oder ähnliches aufrufen?lg
-
Ohne es jetzt genau zu wissen würde ich erst mal sagen das:
@ILT+450
der Adresse deiner Funktion entspricht.
Meiner Meinung nach ist das
ILT
ein Segement und die Adresse des Segements + 450 = Adresse deiner Funktion.
Bsp. zum @
mov ax,@data ; Schiebe die Adresse des Datensegments nach ax mov ds,ax ; Das Datensegment register hat jetzt die Adresse des Datensegments erhalten (So war das meine ich ich hab schon länger kein 16bit ASM mehr gemacht^^)
-------------
Der Ratefuchs
-
ILT könnte das Modul sein, in dem sich die Funktion befindet. Die Dokumentation des Debuggers oder Disassemblers sollte Klarheit schaffen.
-
Jeffson schrieb:
call @ILT+450(_meinefunktion) (0EB11C7h)
1. Kann mir einer erklären, was es mit "@ILT+450" genanu auf sich hat?
ILT steht für "Incremental Link Table" (Google!). Diese Tabelle wird beim inkrementellen Linken hergestellt und beinhaltet die Adressen der Funktionen. Ein Sprung zu einer Funktion springt also nicht direkt zur Funktion, sondern zu dem Eintrag in der ILT und von dort zur Funktion. Da ich meine Linker bisher nicht dazu überreden konnte, ein ILT-Symbol herzustellen, kann ich nicht sagen, ob der Sprung direkt oder indirekt ausgeführt wird. In Deinem Fall liegt die Adresse der Funktion meinefunction im "Slot" Nr. 450 der ILT.
Zweck des Ganzen ist, bei einer Neukompilierung nur die geänderten Teile neu übersetzen zu müssen. Es wird dann nur die ILT angepasst. Vorteil ist die "Edit and Continue"-Option beim Debuggen. Nachteil ist, dass die fertigen Programme größer und langsamer sind.
2. Kann ich die Funktion nicht über eine Art "Label" oder ähnliches aufrufen?
Um das auch nur ansatzweise beantworten zu können, brauchen wir noch folgende Informationen:
- Was hast Du eigentlich vor?
- Wie lauten Deine Compiler- und Linkereinstellungen?
- Welchen Disassembler/Debugger benutzt Du, um die "call @ILT..."-Zeile zu bekommen?
viele grüße
ralph