首页 > 解决方案 > %rip-relative 寻址何时以及如何解决?

问题描述

采取以下汇编程序:

_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被解析为实际地址?这个过程在高层次上是如何运作的?

相关为什么这条 MOVSS 指令使用 RIP 相对寻址?.

标签: assemblyx86x86-64memory-addressrelative-addressing

解决方案


推荐阅读