S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

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

Posted on 2013-05-14 09:46 S.l.e!ep.¢% 阅读(1211) 评论(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; 
}

Feedback

# re: C语言中实现不同函数间jump的方法[未登录]  回复  更多评论   

2013-10-10 11:02 by cpp
__asm{push 0}

替换为

_alloca(4)

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理