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

问题描述 投票:2回答:2

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

我想要十六进制操作码的指令的插图:

qword memAddress

jmp far qword ptr [memAddress]
assembly x86 64bit x86-64
2个回答
1
投票
jmp far qword ptr [memAddress]

对于它的价值。我的汇编程序产生:48h,FFh,2Ch,25h,00h,00h,00h,00h


1
投票

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 raxcall rax也是一种选择。)

© www.soinside.com 2019 - 2024. All rights reserved.