x86 jmp注册

bro*_*ody 7 x86 assembly

所以我有一个地址,%eax我想jmp但代码不会编译,有没有办法解决这个问题?

movl 0xdeadbeef, %eax

jmp %eax ; <--- compile error: type mismatch for 'jmp'
Run Code Online (Sandbox Code Playgroud)

Gun*_*iez 22

由于没有人能够为您提供正确答案,因此它是:

jmp   *%eax
Run Code Online (Sandbox Code Playgroud)


gug*_*uga 5

如果没有其他工作,你可以随时使用以下技巧:

push eax
ret
Run Code Online (Sandbox Code Playgroud)

  • 请注意,大多数现代80x86 CPU会跟踪缓冲区中的调用/返回,以便它们可以在知道RET实际返回的内容之前预测RET将返回的地址(并继续进行推测执行).伪造的返回将会杀死并损害性能,从立即"返回错误预测"开始(而不是可能的"jmp/branch预测")并且可能继续返回缓冲区深度的"返回错误预测".基本上,除非必须这样做,否则不要这样做(在这种情况下你不必这样做). (6认同)

Dig*_*oss 5

// target address in eax
jmp   *%eax

// target pointer address in eax
jmp   *(%eax)
Run Code Online (Sandbox Code Playgroud)

对于x86_64,寄存器是: %rax