将函数代码复制到另一个地方,并调用debug运行出错?release运行成功?

donkeydonkey 2009-03-03 08:11:19
今天在研究函数代码的执行时,写了下面的程序

#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为什么运行正常?
请高手指点!谢谢!
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
akkiz 2012-04-26
  • 打赏
  • 举报
回复
这问题我一遇到过,大可能是电脑防火墙debug里面有exe文件的原因破坏debug
donkeydonkey 2009-03-03
  • 打赏
  • 举报
回复
估计是调试器在debug版加入了一些特殊指令。
例如int 3之类的,用来作为断点处理,当遇到该指令时候中断运行到调试器,当要求再运行时,把之前的int 3修改为我们真正的代码内容。

一楼的高手请说详细点……这运行不正常和代码中断有关吗?就是运行停了,回来也还应该是原来的位置啊?还有一点就是如果我没有在调用处设置断点呢??
在release这种方法一定好使?
xtting_8984313 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xtting_8984313 的回复:]
估计是调试器在debug版加入了一些特殊指令。
例如int 3之类的,用来作为断点处理,当遇到该指令时候中断运行到调试器,当要求再运行时,把之前的int 3修改为我们真正的代码内容。
[/Quote]

int 3,指的是汇编语句,中断。
xhy_851221 2009-03-03
  • 打赏
  • 举报
回复
错误信息贴出来
xtting_8984313 2009-03-03
  • 打赏
  • 举报
回复
估计是调试器在debug版加入了一些特殊指令。
例如int 3之类的,用来作为断点处理,当遇到该指令时候中断运行到调试器,当要求再运行时,把之前的int 3修改为我们真正的代码内容。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧