Ich habe ein Stück C++-Code (kompiliert mit g++ unter einer GNU/Linux-Umgebung), die einen Funktionszeiger laden (wie es tut, dass spielt keine Rolle), schiebt einige Argumente auf den Stapel mit einigen Inline-Assembly und ruft dann diese Funktion, der Code ist wie :
unsigned long stack[] = { 1, 23, 33, 43 };
/* save all the registers and the stack pointer */
unsigned long esp;
asm __volatile__ ( "pusha" );
asm __volatile__ ( "mov %%esp, %0" :"=m" (esp));
for( i = 0; i < sizeof(stack); i++ ){
unsigned long val = stack[i];
asm __volatile__ ( "push %0" :: "m"(val) );
}
unsigned long ret = function_pointer();
/* restore registers and stack pointer */
asm __volatile__ ( "mov %0, %%esp" :: "m" (esp) );
asm __volatile__ ( "popa" );
Ich würde gerne eine Art von
#ifdef _LP64
// 64bit inline assembly
#else
// 32bit version as above example
#endif
Aber ich weiß nicht, Inline-Assembly für 64bit-Maschinen, jemand könnte mir helfen?
Merci