32bit to 64bit inline assembly porting
Posted
by Simone Margaritelli
on Stack Overflow
See other posts from Stack Overflow
or by Simone Margaritelli
Published on 2010-03-25T18:16:59Z
Indexed on
2010/03/25
18:53 UTC
Read the original article
Hit count: 536
I have a piece of C++ code (compiled with g++ under a GNU/Linux environment) that load a function pointer (how it does that doesn't matter), pushes some arguments onto the stack with some inline assembly and then calls that function, the code is like :
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" );
I'd like to add some sort of
#ifdef _LP64
// 64bit inline assembly
#else
// 32bit version as above example
#endif
But i don't know inline assembly for 64bit machines, anyone could help me?
Thanks
© Stack Overflow or respective owner