我正在编写一个 PinTool,它可以操作某些寄存器/内存值。然而,在操纵之后,我现在面临的一个挑战是deadloop
.
尤其是由于对某些寄存器值的频繁操作,deadloop
在执行跟踪中创建确实很常见。我正在考虑检测这种情况,并终止执行。
所以这是我的问题,deadloop
在 PinTool 中检测 a 的好做法是什么?我可以想出一些幼稚的解决方案,比如记录执行过的指令,如果某条指令被执行了很多次,就终止执行。
有人可以帮我解决这个问题吗?谢谢你。
我正在编写一个 PinTool,它可以操作某些寄存器/内存值。然而,在操纵之后,我现在面临的一个挑战是deadloop
.
尤其是由于对某些寄存器值的频繁操作,deadloop
在执行跟踪中创建确实很常见。我正在考虑检测这种情况,并终止执行。
所以这是我的问题,deadloop
在 PinTool 中检测 a 的好做法是什么?我可以想出一些幼稚的解决方案,比如记录执行过的指令,如果某条指令被执行了很多次,就终止执行。
有人可以帮我解决这个问题吗?谢谢你。
打开调试器并附加到 pin 可执行文件以检查死循环是否在 pin 本身中。这是极不可能的,最可能的原因是您编写的工具。
对 pintool 做同样的事情。Pintool 正在目标进程中。所以将调试器附加到它。
调试器应该会告诉您问题出在哪里。确定区域后,您可以在 IDA 中打开该工具进行进一步检查或将您的源“连接”到调试器。
另一种方法是记录正在执行的每个 Trace 或基本块 - 检查示例。此日志还应向您显示有问题的区域。
我假设死循环是指无限循环。
一般来说,循环应该有一个或多个退出条件。退出条件具有使循环继续进行的控制转移指令之一(jz、jg、ja...)。所以记录控制转移指令就足够了。
记录指令的成本可能很高,您可能需要将算法范围缩小到特定的线程和模块。
在实施算法来检测它之前,您可能还需要考虑诊断无限循环以了解更多关于原因的信息。