用Detours减少非确定性?

时间:2011-11-10 06:39:09

标签: c random hook detours deterministic

我想知道是否可以使用挂钩(如Detours)来删除任意应用程序中的非确定性。

我们可以假设单线程应用程序(忽略由比赛和调度引起的非确定性)。

我的第一个猜测是覆盖rand(),以便为任何要求伪随机数的函数提供可预测且可重复的输出,无论种子如何。

我是否应考虑覆盖其他常用功能?

我知道这里没有完美的解决方案,但适用于大多数应用程序的解决方案可能会做到。 此外,如果有另一种方法来解决这个问题,我会很有兴趣阅读它。

1 个答案:

答案 0 :(得分:1)

您不需要实际删除rand()和朋友,因为它们是伪随机数生成器。对于相同的种子,rand()将产生相同的结果,因此您实际需要捕获的是用于初始化RNG的time()调用。

关键的洞察力是非确定性效应主要是由于调度(对大部分单线程应用程序没有影响),系统调用的结果和程序中未初始化的内存。您需要控制系统调用的结果以控制程序的输入。 strace是一个非常好的工具,用于确定哪些函数调用需要覆盖。要检查是否未使用未初始化的内存,请使用valgrind