我想使用LD_Preload编写一个名为“CSys :: Printf”的函数,但我认为它不会那么容易,因为在C中你不能在函数名中加上“::”,这就需要匹配原始函数名称。
用于挂钩的一段代码就像这样:
int CSys::Printf(const char *format, ...) {
void *handle;
char *error;
if (conprint == NULL) {
handle = dlopen("dedicated.so", RTLD_LAZY);
if (!handle) {
fputs(dlerror(), stderr);
exit(1);
}
conprint = (int (*)(const char *format, ...))dlsym(handle, "CSys::Printf");
if ((error = dlerror()) != NULL) {
fprintf(stderr, "%s\n", error);
exit(1);
}
printf("*HOOK CSys::Printf OK*");
}
好吧,除了这种情况之外,这应该适用于挂钩任何函数,编译器不会在函数名称上接受“::”。
我该怎么办?
谢谢!