据我所知' jmp'通过使用64位地址作为操作数是不可能的,但我相信使用x64内存位置(来自here JMP r / m64)。但是我怎么能用十六进制来写这个呢?
我想要十六进制操作码的指令说明:
qword memAddress
jmp far qword ptr [memAddress]
答案 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 rax
或call rax
也是一种选择。)