这是C
中的一种独特情况。覆盖函数指针的实现并用于共享库
说我们图书馆称为libfoo.so
和libbar.so
,并在这两个我们同样的功能名称,Get_A
,假设Get_A
由系统调用。
说libbar
被加载,然后用参数G
调用它的Get_A
。 G
是一些函数指针一个结构,有感兴趣的一个:
(*G)->RegisterBaz
所以libbar
的调用Get_A
,我们要变异的指针,RegisterBaz函数,然后调用libfoo
'的S版Get_A
借助于dlopen + dlsym。
有一两件事我想直接分配,但后来我的一个编译器错误只读变量无法分配的,所以我试图去通过指针:
// not void * but actually some function signature typedefed.
void *f_ptr = (*G)->RegisterBaz;
*&f_ptr = r_n;
凡r_n
是一个普通的C函数具有相同签名RegisterBaz
和r_n
我叫原来实行的RegisterBaz
因此,虽然这并不赛格故障,它不带d打电话给我的包装功能。
嗯,这样做给我一个seg故障。 –
您是否100%确定您要替换的功能提供了所有相同的功能?你不能用你自己的库来替换一个库函数,只是因为签名匹配期望它是花哨的。 –
签名是正确的,什么可能是错误的,我可以从哪里开始寻找线索或寻找。 AFAIK我的事情是正确的。 –