[英]Reducing non-determinism with Detours?
我想知道是否有可能在任意应用程序中使用钩子(例如Detours)来消除不确定性。
我们可以假设使用单线程应用程序(忽略竞争和调度引起的不确定性)。
我的第一个猜测是重写rand()
,以便为任何要求伪随机数的函数提供可预测和可重复的输出,而与种子无关。
还有其他我应该考虑覆盖的常用功能吗?
我知道这里没有完美的解决方案,但适用于大多数应用程序的解决方案可能会做到。 另外,如果还有其他方法可以解决此问题,我将对此感兴趣。
您实际上不需要删除rand()
和friends,因为它们是伪随机数生成器。 对于相同的种子,rand()将产生相同的结果,因此,您真正需要捕获的是用于初始化RNG的对time()
的调用。
关键的见解是,不确定性的影响主要是由于调度(对单线程应用程序的大部分没有影响),系统调用的结果以及程序中未初始化的内存而发生的。 您需要控制系统调用的结果以控制程序的输入。 strace
是一个非常好的工具,用于确定哪些函数调用需要覆盖。 要检查是否未初始化使用了任何内存,请使用valgrind
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.