在运行时更改C函数内容

时间:2015-02-23 16:31:36

标签: c linux gcc assembly writable

我有一个用例,其中有条件地选择功能内容。并且该函数指针被传递给其他模块以供以后调用。

void encode_function(int flag)
{
 if (flag == 1)
  encode1();
 if (flag == 2)
  encode2();

  encode_defaults();
}

填充encode_function()后,我会将其传递给其他模块,然后调用它。 我试图用C语言实现它,但到目前为止还没有成功。我试着查看dyncall库,但它只支持动态参数更改。

我正在寻找允许我在运行时更改功能内容的内容。

一些现有问题Is there a way to modify the code of a function in a Linux C program at runtime?

1 个答案:

答案 0 :(得分:3)

您基本上正在寻找将代码视为数据的能力,这是c等编译命令式静态语言中很少提供的功能。在运行时修改函数的功能通常被归类为高阶函数(您基本上试图将函数作为代码中的某处返回函数)。

如果问题可以通过几个静态函数解决,你可以将函数指针传递给不同的实现,否则我认为c不能真正将代码视为数据并动态修改它们。

This question尝试在c中实现高阶函数,但是走这么远可能不是你想要的。