/tmp>cat secret-keeper.c #include int main(int argc, char ** argv) { // note: security checks omitted fputs("find me, I'm the secret",stdout); return 0; } /tmp>make secret-keeper cc secret-keeper.c -o secret-keeper /tmp>strip secret-keeper /tmp>cat secret-reader.pl #!/usr/bin/perl use strict; use warnings; my $secret=qx(./secret-keeper); print "The secret is <$secret>\n"; /tmp>perl secret-reader.pl The secret is /tmp>strace -o trace perl secret-reader.pl The secret is /tmp>grep -C5 find trace /dev/null trace-read(5, "", 4) = 0 trace-close(5) = 0 trace-ioctl(3, TCGETS, 0x7ffeddbf80a0) = -1 ENOTTY (Inappropriate ioctl for device) trace-lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) trace-fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 trace:read(3, "find me, I'm the secret", 8192) = 23 trace-read(3, "", 8192) = 0 trace---- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=12034, si_uid=1001, si_status=0, si_utime=0, si_stime=0} --- trace-fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 trace-close(3) = 0 trace-wait4(12034, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 12034 trace:write(1, "The secret is