Posted on 2013-05-14 09:46
S.l.e!ep.¢% 閱讀(1266)
評論(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;?
}