指定符号放置的绝对地址

时间:2012-03-05 04:42:40

标签: linux linker ld

我有一个我编译的静态库,当我创建可执行文件时,我想要在库中创建的某个函数始终放在固定的绝对地址。

具体来说,我的静态库是一组x86程序集例程,我希望其中一个例程(称为_start_exec)在加载ELF二进制文件时始终位于固定的虚拟地址。我试过看-defsym,虽然我认为这不是我想要的。我不想搞乱可执行文件的起点,我只想要一定的指令序列始终位于我链接的所有可执行文件中的固定虚拟地址。

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说,你可能需要制作一个ld脚本。请参阅linker scripts

上的 binutils 文档

答案 1 :(得分:1)

您可以使用ldABSOLUTE(expr)编写ADDR(section)脚本来执行您想要的操作。来自ld文档:

    SECTIONS { ...
      .output1 :
        { 
        start_of_output_1 = ABSOLUTE(.);
        ...
        }
      .output :
        {
        symbol_1 = ADDR(.output1);
        symbol_2 = start_of_output_1;
        }
    ... }

您可以修改上面的脚本以满足您的确切需求。