【问题标题】:Is it possible to define a C function at runtime? [duplicate]是否可以在运行时定义 C 函数? [复制]
【发布时间】:2012-12-30 06:46:37
【问题描述】:

可能重复:
Dynamically creating functions in c

这是我想做的一个例子:

void  attribute((constructor)) someFunction() {
    // Would be nice to define C function "someFunction2" somehow here.
}

我知道class_addMethod 允许在运行时将 C 函数添加到 Objective-C 类。

是否可以将C函数添加到Cmain空间?

如果我正在考虑这种做事方式,请不要告诉我我错了 - 我对它感兴趣,而不是出于教育目的。

【问题讨论】:

  • 您可以使用现有的源代码作为模板,添加函数,使用系统调用编译器,然后调用新的可执行文件
  • 你应该详细说明你的意图,因为这个问题在这个简单的形式中没有多大意义。应该如何调用新创建的函数?你也想创建实现吗?你想达到什么目标?
  • @Nikolai Ruhe,我的类似问题:stackoverflow.com/questions/14062042/….
  • 如果您真的需要这些问题的帮助,您应该更广泛地描述所有这些的目标。你问的方式听起来就像“我知道 C 做不到,但怎么能做到呢?”

标签: objective-c ios objective-c-runtime


【解决方案1】:

没有。 C 函数由名称和主体组成。编译器将主体转换为可执行代码的二进制片段,当从可执行文件创建进程时,该可执行代码将映射到某个地址。该名称被静态和动态链接器用作该地址的别名。

在运行时,这两个概念都不是很有趣。加载可执行文件并解析名称,因此动态创建它们几乎没有用处。

在 iOS 上,甚至不可能创建新的函数实现,因为内核不允许内存可执行。

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 2020-05-13
    • 2019-09-26
    • 2012-12-08
    • 2012-06-16
    • 2013-02-07
    • 1970-01-01
    • 2013-09-13
    • 2010-09-25
    相关资源
    最近更新 更多