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