读书人

将函数代码复制到另一个地方并调用d

发布时间: 2012-04-28 11:49:53 作者: rapoo

将函数代码复制到另一个地方,并调用debug运行出错?release运行成功?
今天在研究函数代码的执行时,写了下面的程序

#include <stdio.h>
void fun1(int x)
{
printf("%d\n",x);
}

int _tmain(int argc, _TCHAR* argv[])
{
char pppf[200];
memcpy(pppf,(char*)fun1,120);

typedef void (*pf)(int);
pf ppf=(pf)&pppf[0];
ppf(10);//debug error
char* pfun;//用来查看代码空间的值并和复制的值对比

pfun=(char*)fun1;
}
为什么在debug出错?我查看了复制过来的代码是和函数代码空间是一样的,release为什么运行正常?
请高手指点!谢谢!

[解决办法]
估计是调试器在debug版加入了一些特殊指令。
例如int 3之类的,用来作为断点处理,当遇到该指令时候中断运行到调试器,当要求再运行时,把之前的int 3修改为我们真正的代码内容。
[解决办法]

探讨
估计是调试器在debug版加入了一些特殊指令。
例如int 3之类的,用来作为断点处理,当遇到该指令时候中断运行到调试器,当要求再运行时,把之前的int 3修改为我们真正的代码内容。

读书人网 >C语言

热点推荐