@esskar: Ich kann nicht auf jeder Architektur einer Funktion beliebig viele Parameter mitgeben, die sie gar nicht will. Das mag vielleicht unter ix86-Linux funktionieren, ist aber eindeutig als übler Hack einzustufen. Ich weiß auch, dass es unter ix86-Win32 nicht funktioniert.
Zum Beispiel könnte die im System verwendete Aufrufkonvention so etwas verbieten, oder der Kernel könnte aus Sicherheitsgründen ein solches Vorgehen abfangen, etc.
Abgesehen davon, hast du, glaube ich, den Kern des eigentlichen Problemes gar nicht verstanden: Es ist einfach nicht möglich, in Standard C, C++ oder XSUB eine Funktion zu schreiben, die einen Funktionszeiger mit variabel vielen und variabel typisierten Argumenten aufruft, wobei beide Variablen erst zur Laufzeit bestimmt werden. C-Compiler kennen einfach keine Konstrukte, um so etwas auszudrücken. Selbst die Features von <stdarg.h> benötigen auf der Aufruferseite zur Kompilationszeit das Wissen über Anzahl und Typ der Parameter und auf der aufgerufenen Seite besonderen Code, weshalb dieser Mechanismus auch nicht nachträglich einbaubar ist, wenn man die vorhandenen Funktionen nicht ändern kann.
Wenn man also nicht das ganze Problem für alle existierenden Architekturen und Betriebssysteme von Hand in Assembler lösen will, gibt es meines Wissens nur einen wirklich portablen Ansatz und das ist die besagte libffi, die als Anhängsel zum GCC entwickelt wird. Auch diese Bibliothek greift natürlich auf Assemblercode zurück, aber da muss man sich die Arbeit nicht mehr selber machen, weil die GCC Entwickler schon so freundlich waren...
When C++ is your hammer, every problem looks like your thumb.