xiangshifu
驱动小牛
驱动小牛
  • 注册日期2002-07-25
  • 最后登录2013-10-18
  • 粉丝1
  • 关注0
  • 积分5分
  • 威望20点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1298回复:4

请问 wuyanfeng 老大,用0xcc下断点的时候,产生异常怎么处理的?

楼主#
更多 发布于:2004-04-02 10:26
请问 wuyanfeng 老大,用0xcc下断点的时候,产生异常怎么处理的?

x86cpu中的指令长度不一致,用0xcc代替指令下断点的时候,如果被代替的指令长度与0xcc不一样,将会破坏原有的指令,分情况讨论吧:
1,长度一致,这种情况下没有关系
2,被代替指令长于0xcc, 0xcc后面将是一个错误的指令,如果这个错误指令不能被cpu执行,将产生指令错误异常,比较好说,捕获这个异常就可以了,如果能被cpu执行,就比较麻烦. 由于指令是以字节为单位,我的想法是在后面填入nop指令,不知道你怎么解决的?
3,被代替指令小于0xcc,我还没有找到有关指令长度的资料,不知道这种情况会不会有,假设能够出现. 将会破坏两条指令,这时 ,在转跳回来的时候是不是也要执行这两条指令?
xiangshifu
驱动小牛
驱动小牛
  • 注册日期2002-07-25
  • 最后登录2013-10-18
  • 粉丝1
  • 关注0
  • 积分5分
  • 威望20点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-03 09:43
谢谢,你的方式确实很有技巧,epi-1 是关键!

和我想的大不一样, 我自己用的epi+1方式,发现十分难处理,要考虑很多情况!!
wuyanfeng
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2011-05-06
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望127点
  • 贡献值0点
  • 好评度103点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-02 13:36
请问 wuyanfeng 老大,用0xcc下断点的时候,产生异常怎么处理的?

x86cpu中的指令长度不一致,用0xcc代替指令下断点的时候,如果被代替的指令长度与0xcc不一样,将会破坏原有的指令,分情况讨论吧:
1,长度一致,这种情况下没有关系
2,被代替指令长于0xcc, 0xcc后面将是一个错误的指令,如果这个错误指令不能被cpu执行,将产生指令错误异常,比较好说,捕获这个异常就可以了,如果能被cpu执行,就比较麻烦. 由于指令是以字节为单位,我的想法是在后面填入nop指令,不知道你怎么解决的?
3,被代替指令小于0xcc,我还没有找到有关指令长度的资料,不知道这种情况会不会有,假设能够出现. 将会破坏两条指令,这时 ,在转跳回来的时候是不是也要执行这两条指令?

你要把被 cc 替换的原来的指令码改写回去,然后 把 eip-1 后从新执行指令就可以了。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-04-02 11:11
无所谓,你是单字节指令,中断后在INT3中恢复原来的该字节的原来的值,返回后继续执行,根本没有影响.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
exdata
驱动牛犊
驱动牛犊
  • 注册日期2002-11-11
  • 最后登录2007-07-16
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-02 11:03
在异常弹出softICE后用:
a eip    //在当前eip地址开始写入汇编代码;
nop      //用Nop指令代替原来的INT 3(0xcc);
<Esc>    //退出汇编状态;
<F5>     //继续运行您的程序;
游客

返回顶部