使用" ::"挂钩功能在LD_PRELOAD加载的C库中

时间:2014-12-27 08:12:46

标签: c linux hook ld-preload

我想使用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*");
}

好吧,除了这种情况之外,这应该适用于挂钩任何函数,编译器不会在函数名称上接受“::”。

我该怎么办?

谢谢!

0 个答案:

没有答案