阅读:1297回复:4
请问 wuyanfeng 老大,用0xcc下断点的时候,产生异常怎么处理的?
请问 wuyanfeng 老大,用0xcc下断点的时候,产生异常怎么处理的?
x86cpu中的指令长度不一致,用0xcc代替指令下断点的时候,如果被代替的指令长度与0xcc不一样,将会破坏原有的指令,分情况讨论吧: 1,长度一致,这种情况下没有关系 2,被代替指令长于0xcc, 0xcc后面将是一个错误的指令,如果这个错误指令不能被cpu执行,将产生指令错误异常,比较好说,捕获这个异常就可以了,如果能被cpu执行,就比较麻烦. 由于指令是以字节为单位,我的想法是在后面填入nop指令,不知道你怎么解决的? 3,被代替指令小于0xcc,我还没有找到有关指令长度的资料,不知道这种情况会不会有,假设能够出现. 将会破坏两条指令,这时 ,在转跳回来的时候是不是也要执行这两条指令? |
|
沙发#
发布于:2004-04-02 11:03
在异常弹出softICE后用:
a eip //在当前eip地址开始写入汇编代码; nop //用Nop指令代替原来的INT 3(0xcc); <Esc> //退出汇编状态; <F5> //继续运行您的程序; |
|
板凳#
发布于:2004-04-02 11:11
无所谓,你是单字节指令,中断后在INT3中恢复原来的该字节的原来的值,返回后继续执行,根本没有影响.
|
|
|
地板#
发布于:2004-04-02 13:36
请问 wuyanfeng 老大,用0xcc下断点的时候,产生异常怎么处理的? 你要把被 cc 替换的原来的指令码改写回去,然后 把 eip-1 后从新执行指令就可以了。 |
|
地下室#
发布于:2004-04-03 09:43
谢谢,你的方式确实很有技巧,epi-1 是关键!
和我想的大不一样, 我自己用的epi+1方式,发现十分难处理,要考虑很多情况!! |
|