在 PinTool 中检测死循环

逆向工程 小工具
2021-06-23 13:53:51

我正在编写一个 PinTool,它可以操作某些寄存器/内存值。然而,在操纵之后,我现在面临的一个挑战是deadloop.

尤其是由于对某些寄存器值的频繁操作,deadloop在执行跟踪中创建确实很常见我正在考虑检测这种情况,并终止执行。

所以这是我的问题,deadloop在 PinTool 中检测 a 的好做法是什么?我可以想出一些幼稚的解决方案,比如记录执行过的指令,如果某条指令被执行了很多次,就终止执行。

有人可以帮我解决这个问题吗?谢谢你。

2个回答
  1. 打开调试器并附加到 pin 可执行文件以检查死循环是否在 pin 本身中。这是极不可能的,最可能的原因是您编写的工具。

  2. 对 pintool 做同样的事情。Pintool 正在目标进程中。所以将调试器附加到它。

调试器应该会告诉您问题出在哪里。确定区域后,您可以在 IDA 中打开该工具进行进一步检查或将您的源“连接”到调试器。

另一种方法是记录正在执行的每个 Trace 或基本块 - 检查示例。此日志还应向您显示有问题的区域。

我假设死循环是指无限循环。

一般来说,循环应该有一个或多个退出条件。退出条件具有使循环继续进行的控制转移指令之一(jz、jg、ja...)。所以记录控制转移指令就足够了。

记录指令的成本可能很高,您可能需要将算法范围缩小到特定的线程和模块。

在实施算法来检测它之前,您可能还需要考虑诊断无限循环以了解更多关于原因的信息。