Tag: plt

如何强制gcc直接在PIC代码中调用函数?

考虑以下function: extern void test1(void); extern void test2(void) { test1(); } 这是在amd64 Linux上没有-fpic生成的代码gcc: test2: jmp test1 当我使用-fpic编译时,gcc通过PLT显式调用以启用符号插入: test2: jmp test1@PLT 然而,对于与位置无关的代码并不严格需要,如果我不想支持,可以省略。 如有必要,链接器无论如何都会将跳转目标重写为PLT符号。 如何在不更改源代码且不使编译代码不适合共享库的情况下,使函数调用直接转到目标而不是通过PLT显式转换?