Bru*_*rry 7 c++ methods library-interposition
我需要在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
然后运行ala
LD_PRELOAD=`pwd`/libx2.so ./libx_client
干杯
它不太可移植,但您可以用 C 语言编写插入函数,并为其指定 C++ 方法的损坏名称。当然,您必须显式处理此参数,但我认为所有 ELF ABI 都只是将其视为不可见的第一个参数。