C语言实现函数间jump的方法

2013-11-20 14:18:19 · 作者: · 浏览: 194

  下面这种方法是从网上找的,未实际操作过,慎用

  #include <stdio.h>

  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;

  }