cc++语言实现堆栈修改,通过ret跳转到自定义函数

cc++语言实现堆栈修改,通过ret跳转到自定义函数,第1张

cc++语言实现堆栈修改,通过ret跳转到自定义函数,第2张

好处是编译后没有jmp指令,可以通过ret跳转到需要的代码。另外,在调试时,有些代码会被当作数据来处理,会增加调试的难度。缺点是堆栈中至少有4个字节的空需要调用函数,否则堆栈会返回错误。但是空的这四个字节不会被销毁。可能有些事情我没有处理好,如果有的话。)

编译环境:VC6 vc7
#包含

int somefunc( void *ptr)
...{
printf("in somefunc ... ");
返回0;
}

void stackbuild( void *ptr)
...{
printf("in stackbuild ... ");
*(无符号int*)(&ptr-1) ^= *(无符号int *)& ptr;
*(unsigned int *)& ptr ^= *(unsigned int *)(& ptr-1);//注意这里的栈操作
*(unsigned int *)(& ptr-1)= *(unsigned int *)& ptr;
}

Int main (int argc,char * argv [])
...{
//仍然嵌入了一个程序集来平衡堆栈;)谁能改变?看看能否移除嵌入的程序集
__asm...{push 0} //预留4字节空平衡堆栈。注意,这个句子应该和下面的句子一起使用。没有下面的调用,必须有这个语句
stack build(some func);

printf("退出main ... ");
返回0;
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » cc++语言实现堆栈修改,通过ret跳转到自定义函数

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情