如何为C中的函数编写通用挂钩?

时间:2016-10-27 16:40:01

标签: c hook

我想编写一个钩子函数,只要在我的程序中调用函数来调用函数的参数,就会调用该函数。例如:

void hook(function f, ...){
    //some statistics here
    f(...);
}
int main(){
    foo(1, 2);
}

因此,不是直接调用foo,而是调用hook而不是foo作为第一个参数,而1, 2作为额外参数。

C中有类似的东西吗?我可以用其他任何方式在C中实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

宏可以(ab)用于以简单的方式实现这一目标:

void foo( int , int );

void Hook( int a , int b )
{
    //do whatever
    foo( a , b );
} 

#define foo( a , b ) Hook( a , b )

int main( void )
{
    foo( 1 , 2 );
}

请注意,这很容易出错,需要仔细阅读。

答案 1 :(得分:-1)

也许这就是你要找的东西?

typedef enum FunctionPointerType_E
   {
   FPT_Int_IntInt = 1
   } FunctionPointerTypes_T

int foo(
      int a,
      int b
      )
   {
   return(a+b);
   }

void hook(
      FunctionPointerTypes_T fpt,
      void (*function)(void),
      ...
      )
   {
   int rCode;
   int (*fp_Int_IntInt)(int, int);

   switch(fpt)
     {
     case FPT_Int_IntInt:
        fp_Int_IntInt = (int(*)(int, int))function;
        rCode=(*fp_Int_IntInt)(1,2);
     ...
     }

   return;
   }

void CallFooByRefrence(void)
   {
   hook(FPT_Int_IntInt, (void(*)(void))foo, ...);
   return;
   }