2012-04-05 6 views
2

Ich möchte ein in der Nähe, relativ Aufruf einer Funktion von einem anderen Objekt-Datei erstellen:machen einen nahen, relativ Anruf mit NASM

; a.asm 
global _func 
_func: 
; [..] 

; b.asm 
extern _func 
; [..] 
call _func 

Leider hat der Code oben nicht funktionieren. Ich brauche _func in ein Register zu laden:

mov eax, _func 
call eax 

Beiden Dateien in COFF-Objektdateien kompiliert werden. Gibt es eine Möglichkeit, einen nahen, relativen Aufruf durchzuführen, ohne die Funktionsadresse in ein Register zu laden?

Antwort

0

In a.asm, die Zeile:

func: 

sein sollte:

_func: 

nur in einem sehr gekünstelt Fall getestet und es funktioniert für mich. Keine Notwendigkeit, die Funktionsadresse in eax zu laden. Für die Aufzeichnung funktionierte das nicht um den obigen Symbolfehler, also ist das vielleicht ein Tippfehler und ich habe das breitere Problem übersehen.

+0

Danke für Ihren Kommentar. Der Tippfehler existiert im Produktionscode nicht. Also, das ist nicht das Problem. – 0xbadf00d