能力值:
( LV2,RANK:10 )
|
-
-
2 楼
修改之后,再根据页内偏移来算的。我猜的。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
最笨的办法,检测每个页面访问异常,异常地址等于内存断点地址才终端,其他的直接放行。
具体od是怎么实现的就不清楚了。
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
我猜测:内存断点设置内存属性,并记录偏移和边界。每当触发内存访问异常时,OD接收到异常后,1,计算所访问的内存是否在断点范围内,如果在范围内就停下来反馈给用户;如果不在,就将页面属性设置回去,然后再执行上步操作,完成对内存的读写后,立马再设置内存属性。等待下次异常。
证据:内存断点下后,感觉整个OD都慢了很多。其中操作应该少不了。再根据int3断点的工作原理。个人总结的。
不知对不对。
|
能力值:
( LV9,RANK:170 )
|
-
-
5 楼
论坛不是有分析od的文章嘛?
http://bbs.pediy.com/showthread.php?t=65221&highlight=od+%E5%86%85%E5%AD%98+%E5%AD%98%E6%96%AD+%E6%96%AD%E7%82%B9+%E7%82%B9
|
能力值:
( LV15,RANK:1395 )
|
-
-
6 楼
下断点的时候是按照0x1000这么大下的,当发生异常被OD接收到的时候,会查询断点列表是否命中,没命中就改回原来的页属性继续执行了。
就拿你的例子来说,你在0x405530处下断点,就要修改0x405000-0x405999这么大范围的页属性,所以访问这个范围内的代码就会触发异常,然后被OD收到,此时OD 就会根据传入的地址比如(x40552c)在不在断点列表,不在就恢复页属性,继续执行,在就断下来交给用户处理。
这有个调试器,你可以自己单步跟踪看看整个过程: http://bbs.pediy.com/showthread.php?t=196455
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
貌似确实是这个过程
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
不错不错,原来内存断点性能这么低。对每次的异常都要做检查
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢!这样看来内存断点的性能很低。
|
|
|