嘿,我试图在不使用LD_PRELOAD的情况下将函数包装到程序中。
我有两个签名相同的函数:
void someFunc () {
puts ("someFunc");
}
void someFunc_wrapper () {
puts ("someFunc_wrapper");
}
我想通过调用包装函数将任何函数调用重定向到someFunc。
当然,我可以通过定义宏来做到这一点,或者将包装器函数放到共享库中,然后像这样调用程序:
LD_PRELOAD=./mylib.so my_program
但是,我想在运行时重定向函数调用,而不修改程序调用。
据我了解,应该可以通过在运行时修改可执行文件的符号表来重定向这些调用。
任何帮助将不胜感激 :)
最佳答案
ld
具有选项--wrap=symbol
,该选项应执行您想要的操作。手册页上有一个示例,说明了其工作原理。