用 Hook 模拟断点问题
在进程内模拟调试器的断点操作:
1. 插入断点时, 改写断点位置的 5 个字节为一条调用断点处理函数的 call 指令. 比如 call __handle_break_point; 当然, 改写前会把原来的代码保存到相应的地方.
2. 断点命中后, 跳转到了 __handle_break_point 函数, 并在进行一系列的操作后, 得到 g 命令继续执行代码.
3. 要继续执行之前的代码, 我得把保存的代码还原回去, 然后在回到进入断点的地方开是执行.
这一切都没问题, 程序继续运行, 可是刚刚下断点已经不存在了, 被写回去了. 也就是说断点只能被命中一次!
为此, 我需要找到一个时机, 重新把下断点的 call __handle_break_point 指令写回去. 但是, 程序开是运行后我已经失去控制权了, 请教大家, 有没有好的办法来重新写入断点? 简单一点的, 最好是别要求用反汇编引擎去反汇编代码, 然后对反汇编的代码做很多分析的.