Ich untersuche die Portierung einer Skript-Engine, die für Windows auf Linux geschrieben wurde; Es ist für Winamps Visualisierungsplattform AVS. Ich bin mir nicht sicher, ob das überhaupt möglich ist. Von dem was ich sagen kann, nimmt der Code die Adressen der C-Funktionen nseel_asm_atan
und nseel_asm_atan_end
und speichert sie innerhalb einer Tabelle, auf die sie während der Codeausführung verweisen kann.
Ich habe mir die MS-Dokumentation angesehen, aber ich bin mir nicht sicher, was __declspec(naked)
wirklich tut. Was ist Prolog und Epilog Code in der Dokumentation erwähnt? Ist das mit Windows-Aufrufkonventionen verbunden? Ist das tragbar? Kennen Sie Linux-basierte Beispiele mit ähnlichen Techniken?
Grundsätzlich erstellt der Funktionsprolog einen Stack-Frame für lokale Variablen und der Epilog kümmert sich darum, ihn zu bereinigen. Dies wird normalerweise automatisch vom Compiler erledigt. Wenn Sie __declspec(naked)
verwenden, liegt es an Ihnen, diesen Stack-Frame einzurichten, damit Sie flexibler arbeiten können.
Es gibt viele Referenzen: hier , hier , auch hier und mehr.
Der GNU gcc-Compiler unterstützt auch nackte, aber anscheinend nicht für x86: Suche nach "nackt" in der Seite (Ich habe nicht versucht zu sehen, ob es auf x86 funktioniert)
Tags und Links c assembly windows linux calling-convention