将具有绝对地址的符号链接到PIC二进制文件

时间:2018-10-15 11:28:13

标签: c embedded bootloader position-independent-code

我正在创建一个由多个二进制图像(通过python脚本组合在一起)构成的新图像。问题在于最后一个二进制映像必须使用fPIC编译,而先前的映像则不是。最后一个映像(使用fPIC编译的映像)使用--just-symbols重用其他二进制映像中的功能。

问题是,当我尝试从另一个二进制文件(--just symbols接收到的符号)中调用该函数时,该符号的地址是相对的而不是绝对的,这会导致严重错误。

如何将具有绝对地址的符号链接到PIC二进制文件?

代码示例:

将fun.c文件编译成fun.elf,剥离到fun.bin:

int fun(int a,int b)
{
    print("help\r\n");
}

使用-fPIC--just-symbols=fun.elf编译的文件fail.c:

int fail(void)
{
    fun(1,3); 
}

在示例中,fail.bin中fun的地址是相对的,而不是绝对的。

1 个答案:

答案 0 :(得分:0)

因此,经过更多研究后,我发现这无法完成。 您不能强制使用fPIC标志编译的应用程序中的某个计算机不将PIC用于特殊符号(在我的情况下是--just-symbols中的符号)。

我选择的解决方案实际上是解析非PIC elf文件并获取所需功能的地址。使用这些地址并将其转换为所需的功能。