我有一个关于编码的问题,因为我刚开始使用Intel64反汇编。指令jmp *%rsp
将如何编码?由于它使用*
(指针),我有点困惑。这会使编码特殊吗?我似乎无法在手册中找到任何内容?
到目前为止,我猜测jmp *%rsp
应编码为:ff c0
考虑使用的注册表等。ff c0
是正确的,还是我错了?
答案 0 :(得分:2)
为什么不把它喂给汇编程序?顺便说一下,它是ff e4
。 ff c0
为inc %eax
。
*
表示间接跳转at&t语法。区分jmp foo
和jmp *foo
是必要的,前者是简单的相对跳跃,后者是间接跳过指针。 *
在这种情况下是可选的,因为它不含糊不清(尽管它会触发警告)。对应方为jmp *(%rsp)
,括号不同。
此指令的intel指令集参考条目为ff /4 jmp r/m64
。
查看modr / m编码表2.2中的/4
,我们看到esp
(在64位模式下映射到rsp
)的值确实为e4
。< / p>
答案 1 :(得分:0)
随意使用在线汇编程序:https://defuse.ca/online-x86-assembler.htm#disassembly
ff e4 jmp rsp