我想包装execve系统调用。我首先编写了以下代码。但每当我使用它的时候。我得到了分段故障核心转储。
#include <unistd.h>
#include <stdio.h>
#define _GNU_SOURCE
#include <dlfcn.h>
#include <string.h>
static int (*real_execve)(const char *filename, char *const argv[], char *const envp[])=0;
int execve(const char *filename, char *const argv[],
char *const envp[])
{
printf("intercepted %s \n", filename);
return real_execve(filename, argv, envp);
}发布于 2017-07-26 03:52:12
您需要将real_execve函数指针设置为位于函数顶部的“真实”指针。
if (!real_execve) {
real_execve = dlsym(RTLD_NEXT, "execve");
}正如你现在所拥有的,real_execve从来没有被设置过,所以你在调用一个空指针,它会崩溃。
https://stackoverflow.com/questions/41706189
复制相似问题