#include <stdio.h>
#include <string.h>
#include <sys/prctl.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <unistd.h>

int main(void)
{
	char s[128];
	int wstatus;
	pid_t pid;

	pid = fork();
	memset(s, 0, sizeof(s));
	if (pid) { // parent code
		do {
			wait(&wstatus);
			if (WIFSIGNALED(wstatus) ||
			    ((char)(WIFSIGNALED(wstatus) + 1) >> 1 > 0)) {
				puts("child is exiting...");
				return 0;
			}
		} while (ptrace(PTRACE_PEEKUSER, pid, 44, 0) != 11);
		puts("no exec() for you");
		kill(pid, SIGKILL);
	} else { // child code
		prctl(1, PR_SET_PDEATHSIG);
		ptrace(PTRACE_TRACEME, 0, NULL, NULL);
		puts("Give me some shellcode, k");
		gets(s);
	}
	return 0;
}
