如何在缓冲区中执行代码?

Posted

技术标签:

【中文标题】如何在缓冲区中执行代码?【英文标题】:How to execute a code in buffer? 【发布时间】:2013-12-24 11:25:55 【问题描述】:

我想知道我是否可以执行存储在缓冲区中的代码。例如:

char buffer[20] = "printf(\"***\");";

有没有办法执行 printf 语句?

【问题讨论】:

您必须创建自己的,因为它没有在 C 中动态执行语句的机制。而且缓冲区太小。 如果通过interpreter 运行,您可以实现它。或者,如果您将解释器嵌入到您的应用中。 或者以某种方式即时编译它? 【参考方案1】:

C 中没有类似eval 的构造,就像在某些所谓的脚本语言中那样。由于 C 通常被编译为机器代码而不是在运行时解释,因此实现这些功能需要一个带有一些 C 编译器或 C 解释器的平台才能使程序运行。

您可以看看这个问题:Is there an interpreter for C? 并检查那里的链接或搜索 C 解释器。

只要您要执行的字符串在编译时是已知的(即您不根据某些输入创建它们),您就可以使用函数指针:

void print_hello(void) 
    puts("Hello, world!");


void print_goodbye(void) 
    puts("Goodbye.");


int main(void) 
    void (*printer)(void) = print_hello;
    printer();
    printer = print_goodbye;
    printer();
    return 0;

您可以将printer 设置为任何函数的地址(具有兼容类型),因此您无需在编译时知道最终将调用哪个函数。

HTH

【讨论】:

以上是关于如何在缓冲区中执行代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 AudioQueue 缓冲区中的数据?

如何执行汇编操作码而不将其存储到缓冲区 c/python 中?

在 C++ 中处理音频缓冲区时,如何执行从 float -> double -> float 的转换

如何在python代码中添加字符串或缓冲区?

安全牛学习笔记缓冲区溢出

如何在Python中异步记录stdout / stderr?