易码技术论坛

 找回密码
 加入易码
搜索
查看: 88947|回复: 4

请教关于C++的代码动态修改

[复制链接]
发表于 2006-3-14 22:08:00 | 显示全部楼层
感觉在逻辑上完全可以用一些判断来代替……
 楼主| 发表于 2006-3-15 08:03:00 | 显示全部楼层
忘了说了,代码是不能修改的。dosomething里面是修改了某一地址的数据。后来发现修改的是dosomething的函数返回地址,使它执行完毕后直接返回到if(...){...}里面了。就像goto一样。
发表于 2006-3-15 12:15:00 | 显示全部楼层
抽象的听不懂了……

8312_36672_5092.rar

177 KB, 下载次数: 118

8312_36672_5094.rar

177 KB, 下载次数: 118

 楼主| 发表于 2006-3-16 11:08:00 | 显示全部楼层
因为调用一个函数的时候,函数的返回地址、参数列表、局部变量会依次被压入堆栈。所以可以找到那个返回地址的地址然后修改它。使得函数调用完毕后返回到一个指定的目标位置。
 楼主| 发表于 2006-3-10 23:25:44 | 显示全部楼层 |阅读模式
  1. if (...) {
  2. dosomething();
  3. }

  4. msg1 = extract_message1();

  5. if (*msg1 == '\0') {...}
复制代码


msg1为未被初始化的char *,在dosomething里面做些什么对内存的操作可以使得程序跳过extract_message1的执行,并且使下面的if里面的表达式不会出现非法内存访问?

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-11 01:15 , Processed in 0.010582 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表