假设我有一个没有外部依赖的 C 文件,只有 const 数据部分。我想编译这个文件,然后得到一个可以加载到另一个程序中的二进制 blob,该函数将通过函数指针使用。
举个例子,这是一个虚构的二进制模块,f1.c
static const unsigned char mylut[256] = {
[0 ... 127] = 0,
[128 ... 255] = 1,
};
void f1(unsigned char * src, unsigned char * dst, int len)
{
while(len) {
*dst++ = mylut[*src++];
len--;
}
}
我想把它编译成 f1.o,然后是 f1.bin,然后在 prog.c 中像这样使用它
int somefunc() {
unsigned char * codedata;
f1_type_ptr f1_ptr;
/* open f1.bin, and read it into codedata */
/* set function pointer to beginning of loaded data */
f1_ptr =(f1_type_ptr)codedata;
/* call !*/
f1_ptr(src, dst, len);
}
我想从 f1.c 到 f1.o 涉及 -fPIC 以获得位置独立性。我可以使用哪些标志或链接描述文件从 f1.o 转到 f1.bin ?
澄清:
我知道动态链接。在这种情况下,动态链接是不可能的。如果可能的话,链接步骤必须将 func 指针转换为加载的数据。
请假设没有操作系统支持。如果可以的话,我会在汇编中写 f1 与 PC 相关的地址。