Posted on 2013-05-14 09:46
S.l.e!ep.¢% 阅读(1245)
评论(1) 编辑 收藏 引用 所属分类:
C++
下面这种方法是从网上找的,未实际操作过,慎用
#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;
}