我构建了一个 JIT,它读取 C 代码并将它们转换为目标文件 (.o);目标文件存储一个````main(int argc, char **argv)''''函数。我的问题是如何将这个对象加载到内存中并执行存储在其中的主要函数?
注意:我在 SO 中看到过许多类似的问题,但我找不到答案,所以请不要将此问题标记为重复问题
最佳答案
您可以指示 gcc
生成一个共享对象 (.so) 文件(这可以从 .c 文件和 .o 文件中生成)- 选项 -shared
和 -fpic
可能是必需的。然后你可以使用 void *handle = dlopen(...)
加载它,使用 p = dlsym(handle, "main")
获取包含函数的地址,然后用 p()
执行它。
关于linux - 加载到 RAM 中并执行存储在目标文件中的机器代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19834375/