2 Stimmen

Inline-Assembly-Portierung von 32bit auf 64bit

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X