在x86-64 AT&T组装中,地址前的星号*是什么意思?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)
...
401147: ff 24 c5 80 26 40 00    jmpq   *0x402680(,%rax,8)
...

内存地址前面的星号是什么意思?此外,当内存访问方法缺少它的第一个寄存器值时,它意味着什么?

通常它的类似(“%register”,%rax,8),但在这种情况下它没有第一个寄存器。

有小费吗?

提问于
用户回答回答于

它是跳转到内存中包含的地址。地址存储在地址的存储器中rax*8+0x402680,其中rax是当前rax值(当执行该指令时)。

用户回答回答于

这是AT&T汇编语法:

  • 来源在目的地之前
  • 助记符后缀表示操作数的大小(q对于四边形等)
  • 寄存器%以及前缀值为前缀$
  • 有效地址的格式为DISP(BASE, INDEX, SCALE)(DISP + BASE + INDEX * SCALE)
  • 指示的绝对跳转/调用操作数*(与IP相对)

所以,你有一个jmpq跳转到存储的绝对地址%rax * 8 + 0x402680,并且是一个四字长。

扫码关注云+社区

领取腾讯云代金券