通过LEA加载绝对指针进行注册

问题描述 投票:0回答:1

如何通过lea加载绝对地址进行注册?
我尝试了这段代码:

asm.lea(asmjit::x86::rax, (uint64_t) (address));

我尝试使用这个代码

asm.lea(asmjit::x86::rax, asmjit::x86::ptr((uint64_t) (address)));

但它们都不起作用。 Asmjit 记录“无效使用 64 位指针”。但如果我用平面汇编器编写这段代码,它就可以工作(

lea rax, QWORD_PTR [address]
)。

assembly x86-64 asmjit
1个回答
0
投票

答案很简单,使用

mov
,它允许 64 位立即数:

a.mov(x86::rax, uint64_t(address));

lea
指令只能编码32位位移,这意味着它不可能编码任意64位地址。然而,当您需要相对寻址 (
lea
) 时,
rip + xxx
很有用,AsmJit 也能理解。例如,如果您在代码后嵌入了数据,则可以使用
lea
获取此类数据的地址。

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