C語(yǔ)言中實(shí)現(xiàn)不同函數(shù)間jump的方法
Posted on 2013-05-14 09:46 S.l.e!ep.¢% 閱讀(1284) 評(píng)論(1) 編輯 收藏 引用 所屬分類: C++下面這種方法是從網(wǎng)上找的,未實(shí)際操作過(guò),慎用
#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);? //注意此處對(duì)堆棧操作?
?*(unsigned int*)(&ptr-1) ^= *(unsigned int*) &ptr;?
printf("exit stackbuild... \n");
}?
int main(int argc, char *argv[])?
{?
?// 還是嵌入了一句匯編,平衡堆棧;)哪位高人改改,看能不能把嵌入?yún)R編去掉?
?__asm{push 0} //預(yù)留4字節(jié)空間,平衡堆棧,注意此句和下面的句子要一起用,沒(méi)有下面的調(diào)用,必須沒(méi)有該語(yǔ)句?
?stackbuild(somefunc);?
?printf("exit main...\n ");?
?return 0;?
}