C 我能否仅在指定文件中拦截代码中的函数调用?

C 我能否仅在指定文件中拦截代码中的函数调用?,c,C,我有两个(很长的)c代码文件,foo1.c和foo2.c,还有一个我无法访问其源代码的库libfoo.a。在这三个文件中,它们都使用一个名为MyFooFunc的函数。现在我只想截取MyFooFunc来自foo1.c的调用,有自己的实现,但不截取其他两个文件中的函数调用。有没有什么方法可以做到这一点,而不用重命名MyFooFunc函数名 感谢您的建议。如果您不想更改“foo1.c”,最简单的方法是将其打包到另一个源文件中进行编译。那就不要自己编译了 正如Eric所建议的,这个包装器使用预处理器宏更

我有两个(很长的)c代码文件,
foo1.c
foo2.c
,还有一个我无法访问其源代码的库
libfoo.a
。在这三个文件中,它们都使用一个名为
MyFooFunc
的函数。现在我只想截取
MyFooFunc
来自
foo1.c
的调用,有自己的实现,但不截取其他两个文件中的函数调用。有没有什么方法可以做到这一点,而不用重命名
MyFooFunc
函数名


感谢您的建议。

如果您不想更改“foo1.c”,最简单的方法是将其打包到另一个源文件中进行编译。那就不要自己编译了

正如Eric所建议的,这个包装器使用预处理器宏更改函数的名称

//foo1altered.c
#定义MyFooFunc myalternatefofunc
#包括“foo1.c”

是的,这是可能的,您必须检查回信地址。一旦编译,文件/它们的名称就不相关了。您需要对堆栈指针执行检查,以查看调用来自何处以拦截它。有几种方法可以做到这一点,最常见的是热补丁:用跳转指令替换钩子的第一个x字节既然你有
foo1.c
,你只需在其中插入
#define MyFooFunc myalternativefounc
。你使用GCC吗?