-fPIC 地址无关补充

在x86_64机器上,都是基于ip相对寻址的,就算编译不带上-fPIC,函数调用还是使用相对寻址

1.如果一个程序是动态链接的,就算使用了-fPIC选项,引用全局变量地址的代码出会写死为全局偏移表,如果是静态链接的,那么还是基于偏移

#静态链接  
400198: 8b 15 66 0e 20 00       mov    0x200e66(%rip),%edx        # 601004 <g_c>
40019e: 8b 05 5c 0e 20 00       mov    0x200e5c(%rip),%eax        # 601000 <g_a>

#动态链接
40055f: be 40 10 60 00          mov    $0x601040,%esi


例外

1.假设一个全局变量为static修饰,那么不需要全局偏移表

2.如果一个变量为const修饰,并且值一个寄存器能存的下,那么也不需要全局偏移,写死这个值就行,因为这个值无法改变


当然上面的注意事项只是为了代码注入练习,如果只是开发程序,不影响

上一篇: nasm函数调用约定
下一篇: 无
作者邮箱: 203328517@qq.com