我正在尝试挂钩一些适用于文件名的 glibc 函数。基本上我需要稍微修改文件名,然后将它与其他参数一起传递给原始 glibc 函数。
代码如下所示:
FILE *fopen(const char *filename, const char *modes) {
filename = modify(filename); // assuming we don't need to free the new filename pointer for now
using FuncT = FILE*(*) (const char *, const char *);
static FuncT originalFunc = (FuncT)dlsym(RTLD_NEXT, "fopen");
return originalFunc(filename, modes);
}
这在大多数情况下都可以正常工作,但是当涉及到函数的可变参数时int execl(const char *path, const char *arg, ...)
,我该如何正确地做到这一点?