嘿,我试图在不使用LD_PRELOAD的情况下将函数包装到程序中。

我有两个签名相同的函数:

void someFunc () {
    puts ("someFunc");
}

void someFunc_wrapper () {
    puts ("someFunc_wrapper");
}

我想通过调用包装函数将任何函数调用重定向到someFunc。
当然,我可以通过定义宏来做到这一点,或者将包装器函数放到共享库中,然后像这样调用程序:
LD_PRELOAD=./mylib.so my_program

但是,我想在运行时重定向函数调用,而不修改程序调用。
据我了解,应该可以通过在运行时修改可执行文件的符号表来重定向这些调用。

任何帮助将不胜感激 :)

最佳答案

ld具有选项--wrap=symbol,该选项应执行您想要的操作。手册页上有一个示例,说明了其工作原理。

10-07 19:24