在another question我有問題,將代碼移植setcontext和makecontext調用一個泛型函數指針
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");
到64位平臺和很多人告訴我,我應該使用,而不是設置由於setcontext和makecontext功能32位和64位之間的調用轉換差異以及可移植性問題。
嗯,我真的找不到任何有用的文檔在線,或者至少不是我需要實現這一點的那種,所以,我如何使用這些函數將參數推入堆棧,調用泛型函數指針,獲取返回值,然後恢復寄存器?
好的,但我如何將ulong值插入堆棧? – 2010-03-26 00:44:23
好吧,但問題是,makecontext想要的功能的參數,我不知道他們的數量,他們可能是2個參數爲沒有,或4 ... – 2010-03-26 01:20:11