我想在执行给定地址的代码时引发异常,而不会在代码中显示它。
我知道使用硬件断点是可能的,但是如果有人要附加使用它们的调试器,这些就会被删除,而我无法检测它们是否缺失并替换它们。还有哪些其他选择?
速度是一个问题,即:我不能做PAGE_GUARD单步执行;用户会迟到。
我在Windows上并使用VC 2012 w / C ++。
答案 0 :(得分:1)
如果异常处理成本太高,唯一的其他解决方案就是像CPU那样模拟代码。
但有几点需要注意:
另一个,也许更实际的选择是在可感兴趣的地址修补可执行文件,将执行转移到你的代码(使用jmp
指令),在那里做你需要的任何事情然后再回去。您必须处理所有上下文保留/恢复,并模拟由写在其上的jmp
指令损坏的指令。这里也有一些警告。那些被覆盖的指令可以从代码中的其他地方跳转到。您必须选择地址,以便不会跳到jmp
的中间,或者您必须以某种方式处理它们(不确定如何) )。