gpt4 book ai didi

c - 以编程方式模拟函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:31 25 4
gpt4 key购买 nike

有没有办法以编程方式模拟在 linux 上运行的嵌入式 c 应用程序的函数。在下面的示例中,我想模拟 main 在运行时调用 someBlah 而不是 someFunc

#include <stdio.h>

void someFunc( void )
{
printf("%s():%d\n",__func__,__LINE__);
}

void someBlah( void )
{
printf("%s():%d\n",__func__,__LINE__);
}

int main(void)
{
someFunc();
}

该程序将在 Linux 中从 ram 执行,因此文本段应该是可修改的。我知道 GDB 在一些类似的概念上工作,其中断点代码位置被陷阱指令替换。

最佳答案

当然,做一个函数指针表就可以了。

#define BLAH 0
#define FOO 1
void (*table_function[])(void) = {someBlah, someFoo};

如果它们都具有相同的接口(interface)和返回类型,您可以通过切换表条目来切换它们。

然后你通过执行调用一个函数

table_function[BLAH]();

如果你想交换一个函数,就说

table_function[BLAH] = otherBlah;

此外:除非您正在编写某种 JIT 编译环境或 VM,否则不要这样做,通常您不需要这样的构造,如果您需要它们,您可能会遇到糟糕的架构日。

尽管如果您有 OO 设计经验,您可以用 C 语言设计多态结构(如果这没有意义,请忽略)。

关于c - 以编程方式模拟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com