据我所知'jmp'使用64位地址作为操作数是不可能的,但我相信使用x64内存位置是(来自here JMP r / m64)。但是我怎么能用十六进制写呢?
我想要十六进制操作码的指令的插图:
qword memAddress
jmp far qword ptr [memAddress]
jmp far qword ptr [memAddress]
对于它的价值。我的汇编程序产生:48h,FFh,2Ch,25h,00h,00h,00h,00h
jmp far
不接受qword内存操作数,需要将80位m16:64
操作数加载到CS:RIP中。
我想你想省略far
并使用间接近似跳转,只修改RIP,而不是CS。你说你想要JMP r/m64
,这就是它。
在NASM语法中,qword
是间接跳转的默认操作数大小:
default rel
label:
jmp [rel label]
Assescbles + disassembles(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 rax
或call rax
也是一种选择。)