【问题标题】:How would this jump instruction be encoded in Intel64?这个跳转指令将如何在 Intel64 中编码?
【发布时间】:2014-07-21 18:17:15
【问题描述】:

我有一个关于编码的问题,因为我刚开始使用 Intel64 反汇编。指令jmp *%rsp 将如何编码?由于它使用*(指针),我有点困惑。这是否使编码特别?我似乎在手册中找不到任何内容?

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

【问题讨论】:

    标签: assembly encoding x86-64


    【解决方案1】:

    你为什么不直接把它喂给汇编器呢?顺便说一下,我是ff e4ff c0inc %eax

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

    该指令的英特尔指令集参考条目是ff /4 jmp r/m64。 在 modr/m 编码表 2.2 中查找 /4,我们看到 esp(在 64 位模式下映射到 rsp)的值确实是 e4

    【讨论】:

      【解决方案2】:

      随意使用在线汇编器:https://defuse.ca/online-x86-assembler.htm#disassembly

      ff e4  jmp rsp
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-18
        相关资源
        最近更新 更多