如何在缓冲区中执行代码?
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
【讨论】:
以上是关于如何在缓冲区中执行代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何执行汇编操作码而不将其存储到缓冲区 c/python 中?