我正在尝试一个 C 程序。我sub
在文件中定义了ac 子例程sub.c
,如下所示:
int sub (int a, int b)
{
return a + b;
}
我编译这个文件并生成一个目标文件sub.o
。
我想从另一个sub
名为.sub.o
main
main.c
通常我会这样做:
int main ()
{
int r = sub(10, 20);
printf("result = %d\n", r);
return 0;
}
然后编译如下: gcc -o main main.c sub.o
我想要做的是能够通过在运行时sub
直接从目标文件中读取其代码来调用子例程。sub.o
我知道我可以使用基于共享对象的解决方案。但是有没有一种方法不需要我实现对共享对象的完全支持,并且仍然允许我将代码从对象文件加载到 RAM 中的某个位置并通过跳转到该位置来执行它?简而言之,我正在寻找某种可以让我做到这一点的快速修复。
我知道objdump
允许我从.o
文件中提取可执行代码,但我以后不怎么处理它。欢迎任何帮助或正确方向的指示。
Note:
我想在用户空间中的任何基于 Linux 的系统上执行此操作。