能力值:
( LV6,RANK:80 )
|
-
-
2 楼
1、每个线程都会触发异常转入你的VEH函数,即便一个线程正在你的VEH函数中执行代码,其他线程也可能同时在执行你的VEH函数代码,VEH是进程级别的。
2、调试器的异常是内核分发的,所以第一次接到异常的应该都是调试器。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
1.一个线程中断下来,不影响其他线程,也就是说其他线程会照常运行.
2.如2L所说,程序在被调试状态下,任何异常都会先分发给调试器,如果调试器不进行处理,才会分发给被调试进程
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
先谢谢楼上2位:)
那我的问题又来了,我采用的是VEH任意地址hook,参照的是这篇文章(http://www.pediy.com/kssd/pediy10/85807.html)
1.这个Hook调用时先恢复原来Hook的代码,然后执行新call...既然有恢复的操作,那么多线程情况下肯定存在漏hook,这个如何解决?有没有更好的hook方法?
2.VEH hook优先调用调试器,那对hook的进程进行调试时,hook部分代码就失效了? 有没有解决方法呢?
|
能力值:
( LV6,RANK:80 )
|
-
-
5 楼
1、。。。这是一个很神奇的RP概率问题。
2、调试器对第一次发生的异常一般都是交给系统继续分发给程序,程序无法处理这个异常才会从新返回调试器,调试器才会要求用户处理,因为不处理就挂了。VEH异常的时候调试器不处理,你的程序处理了,系统就不会继续分发给调试器了。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
1.安装veh后,给所有线程中设置硬件断点来设置hook就不会有这个问题,或者学od,每次断下来后暂停所有线程,恢复代码,在断下的线程执行单步中断,再设置回int3断点,然后恢复所有线程的执行,就OK了,不过后者这个方法看起来有些复杂了.
2.调试器设置忽略掉你自己设置的那个异常,就会自动交会被调试进程,也就是交给你的veh去处理了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
异常处理循序 调试器 然后 VEH 然后 SEH 处理
|
|
|