在运行时更改 C 函数内容

标签 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?

最佳答案

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

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

This question尝试在 c 中实现高阶函数,但走到这一步可能不是您想要的。

关于在运行时更改 C 函数内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678513/

相关文章:

linux - make 中是否有等同于 -j 的 checkinstall 选项?

linux - 尝试我的第一个 BASH 脚本,总是遇到意外的文件结尾

c - C 中的数字时钟程序 - 使用中断?

c - GCC 链接目录

c - 使用宏(GCC)向指针添加偏移量

c - 打开大文件

c - 如何声明多个数组?

c - 如何在 C 的二维字符数组中找到字符指针?

c# - 从 C 调用 Mono exe 找不到 libc

php - 我可以用 C 语言包装我网站上的 PHP 代码来构建 iOS 应用程序吗?