Assembly 这个跳转指令如何在Intel64中编码?

Assembly 这个跳转指令如何在Intel64中编码?,assembly,encoding,x86-64,Assembly,Encoding,X86 64,我有一个关于编码的问题,因为我刚刚开始使用Intel64反汇编。指令jmp*%rsp将如何编码?因为它使用的是*(指针),所以我有点困惑。这会使编码变得特别吗?我在手册里似乎找不到关于这个的任何东西 到目前为止,我猜测jmp*%rsp应该被编码为:ff c0考虑到正在使用的寄存器,等等。ff c0是正确的,还是我错了?为什么不直接将它提供给汇编程序呢?顺便说一下,这是ff e4ff c0是inc%eax *表示at&t语法中的间接跳转。有必要区分jmp foo和jmp*foo,前者是简单的相对跳

我有一个关于编码的问题,因为我刚刚开始使用Intel64反汇编。指令
jmp*%rsp
将如何编码?因为它使用的是
*
(指针),所以我有点困惑。这会使编码变得特别吗?我在手册里似乎找不到关于这个的任何东西


到目前为止,我猜测
jmp*%rsp
应该被编码为:
ff c0
考虑到正在使用的寄存器,等等。
ff c0
是正确的,还是我错了?

为什么不直接将它提供给汇编程序呢?顺便说一下,这是ff e4<代码>ff c0是
inc%eax

*
表示at&t语法中的间接跳转。有必要区分
jmp foo
jmp*foo
,前者是简单的相对跳转,后者是通过指针的间接跳转。在这种情况下,
*
是可选的,因为它并不含糊不清(尽管它会触发警告)。对应的是
jmp*(%rsp)
,不同之处在于括号

此指令的英特尔指令集参考项为
ff/4 jmp r/m64

在modr/m编码表2.2中查找
/4
,我们看到
esp
(在64位模式下映射到
rsp
)的值确实是
e4

,请随意使用在线汇编程序:

ff e4  jmp rsp