我正在尝试一个C程序。我在文件sub
中定义了一个c子例程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的系统上执行此操作。