采取以下汇编程序:
_start:
mov myvar, %rax
mov myvar(%rip), %rax
mov myvar(%rip), %rax
mov myvar(%rip), %rax
mov myvar(%rip), %rax
运行时产生以下内容gdb
:
!0x00000000004000b0 ? mov 0x600107,%rax
0x00000000004000b8 ? mov 0x200048(%rip),%rax # 0x600107
0x00000000004000bf ? mov 0x200041(%rip),%rax # 0x600107
0x00000000004000c6 ? mov 0x20003a(%rip),%rax # 0x600107
0x00000000004000cd ? mov 0x200033(%rip),%rax # 0x600107
当然,所有myvar
引用都解析为0x600107
. -relative 项目在哪里(或者何时是一个更好的问题)%rip
被解析为实际地址?这个过程在高层次上是如何运作的?