从外部调用静态C函数

Calling static C functions externally

本文关键字:函数 静态 外部调用      更新时间:2023-10-16

这似乎是一个奇怪的问题,但我想知道是否可以通过任何类型的破解从另一个文件调用静态函数,而不显式使用extern或类似的东西。也许是通过直接调用函数的内存地址之类的方法。

基本上,我想做的是创建一个测试框架,它可以通过指定函数、文件和函数参数来调用任何函数。

这样的结构:

component/
component.c
static int foo(int a){return a/2;}
int bar(){ return 4;}
unit_tests/
main.c
int val = component.c::foo(4) * bar();

如果我能在运行时通过注入函数或其他东西的内存地址来实现这一点,那就更好了。不过,我不完全确定这是否可以在linux上执行,或者我是否遇到了安全问题。

也许与此类似,并且在我的组件过程中有一块代码来解释运行时调用并转换为正确的函数地址:通过c/c++中的内存地址调用函数

您可以使用指向静态函数的函数指针。

对于测试框架,请注意,C中的一些现有测试框架使用了强制使用STATIC而不是static说明符的技巧,并且如果您处于测试模式或未指定正确的链接,则STATIC是(由框架)定义为none或static的宏。