发起攻击
Section outline
-
如果交替调用 write() 和 madvise() 系统调用(即,一个调用仅在另一个完成后执行),write() 操作将始终作用于私有副本,我们将永远无法修改目标文件。唯一能让攻击成功的方法是在 write() 系统调用仍在运行时调用 madvise() 系统调用。我们无法每次都成功实现这一点,因此需要尝试多次。只要概率不是极低,我们就有机会。因此,在线程中,我们在无限循环中运行这两个系统调用。
编译 cow_attack.c 并运行几秒钟。如果攻击成功,你应该能够看到已被修改的 /zzz 文件。 请在实验报告中记录你的结果,并解释你是如何实现这一点的。
$ gcc cow_attack.c -lpthread $ a.out ... press Ctrl-C after a few seconds ...