我需要在 C++ 程序中插入方法调用(该类驻留在单独的共享库中)。我以为我可以使用 LD_PRELOAD,但我不确定这将如何工作(我只找到了 C 函数的示例):是否有一种方法可以为单个方法设置插入,而无需从插入的类实现中复制任何代码?
只需为插入的代码创建一个文件(确保实现不合规矩)...命名空间、类名和函数应该与您要拦截的方法相同。在您的类定义中,不要提及您不想拦截的其他方法。请记住,LD_PRELOAD 需要拦截共享对象的完整路径。
例如,要拦截 void X::fn1(),请使用以下命令创建文件 libx2.cc:
#include <iostream>
class X
{
public:
void X::fn1();
};
void X::fn1() { std::cout << "X2::fn()\n"; }
然后编译它:
g++ -shared -o libx2.so libx2.cc
然后运行阿拉
LD_PRELOAD=`pwd`/libx2.so ./libx_client
Cheers
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)