下面这种方法是从网上找的,未实际操作过,慎用
#include
int somefunc( void *ptr)
{
printf("in somefunc… \n");
return 0;
}
void stackbuild( void *ptr)
{
printf("in stackbuild… \n");
*(unsigned int*)(&ptr-1) ^= *(unsigned int*) &ptr;
*(unsigned int*)&ptr ^= *(unsigned int*) (&ptr-1); //注意此处对堆栈操作
*(unsigned int*)(&ptr-1) ^= *(unsigned int*) &ptr;
printf("exit stackbuild… \n");
}
int main(int argc, char *argv[])
{
// 还是嵌入了一句汇编,平衡堆栈;)哪位高人改改,看能不能把嵌入汇编去掉
__asm{push 0} //预留4字节空间,平衡堆栈,注意此句和下面的句子要一起用,没有下面的调用,必须没有该语句
stackbuild(somefunc);
printf("exit main…\n ");
return 0;
}