如何通过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]
)。
答案很简单,使用
mov
,它允许 64 位立即数:
a.mov(x86::rax, uint64_t(address));
lea
指令只能编码32位位移,这意味着它不可能编码任意64位地址。然而,当您需要相对寻址 (lea
) 时,rip + xxx
很有用,AsmJit 也能理解。例如,如果您在代码后嵌入了数据,则可以使用 lea
获取此类数据的地址。