Why does gcc generates strange code without flag -fno-pie?

后端 未结 1 1820
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-22 21:14

I am trying to compile dummy function in gcc with flag -fno-pie and without.

void dummy_test_entrypoint() { }

When i compile without the flag.<

1条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-01-22 21:30

    You disassembled the object file without the --reloc flag, so the output is misleading. With the --reloc flag, you'll see this:

       3:   e8 fc ff ff ff          call   4 
                4: R_386_PC32   __x86.get_pc_thunk.ax
       8:   05 01 00 00 00          add    $0x1,%eax
                9: R_386_GOTPC  _GLOBAL_OFFSET_TABLE_
    

    And the subroutine looks like this:

    00000000 <__x86.get_pc_thunk.ax>:
       0:   8b 04 24                mov    (%esp),%eax
       3:   c3                      ret    
    

    This construct loads the GOT pointer into %eax, in case the function needs to reference global data. The function does not contain such a reference, but because you compiled the code without optimization, GCC did not remove the dead code.

    0 讨论(0)
提交回复
热议问题