如何使用x64内存地址跳转,存储在x64位置?

时间:2015-01-04 17:42:51

标签: assembly x86 64-bit x86-64

据我所知' jmp'通过使用64位地址作为操作数是不可能的,但我相信使用x64内存位置(来自here JMP r / m64)。但是我怎么能用十六进制来写这个呢?

我想要十六进制操作码的指令说明:

qword memAddress

jmp far qword ptr [memAddress]

2 个答案:

答案 0 :(得分:1)

jmp far qword ptr [memAddress]

物有所值。我的汇编程序生成:48h,FFh,2Ch,25h,00h,00h,00h,00h

答案 1 :(得分:1)

jmp far不使用qword内存操作数,而是将80位m16:64操作数加载到CS:RIP中。

我认为您想省略far并使用仅修改RIP而不是CS的间接近距离跳转。您说要JMP r/m64,这就是这是。

在NASM语法中,qword是间接跳转的默认操作数大小:

default rel
label:
    jmp [rel label]

对此进行组装和拆卸(objdump -drwC -MIntel

ff 25 fa ff ff ff jmp QWORD PTR [rip+0xfffffffffffffffa] # 401000 <label>


如果指针是一个汇编时间常量,例如,请参见Call an absolute pointer in x86 machine code。对于JIT。 (例如,mov rax, 0x123456789ab / jmp raxcall rax也是一种选择。)