如何使用 NASM 组装对绝对 ptr addr(相对于当前 rip)的相对调用?

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

我希望 NASM 生成类似于以下内容的代码:

call qword ptr [rip + 0x540]

但似乎不知道如何做到这一点。

我当前的代码是:

BITS 64
DEFAULT REL
ORG 0x10000000
abs_addr_of_func_ptr EQU 0x10000600

...

call qword [abs_addr_of_func_ptr]

NASM 应该有足够的信息来计算调用时的当前

rip
,确定
abs_addr_of_func_ptr
的偏移量,并组装对 ptr 的相对调用。但它似乎不想这样做(或者至少我还没有找到一种方法来告诉它)。我该怎么做?

assembly x86 64-bit nasm
1个回答
0
投票

解决方法:

BITS 64
DEFAULT REL
base_addr EQU 0x10000000
ORG base_addr
abs_addr_of_func_ptr EQU 0x10000600 - base_addr + $$

call [abs_addr_of_func_ptr]

当然,如果您愿意,您可以通过硬编码

base_addr
来删除
0x10000000

BITS 64
DEFAULT REL
ORG 0x10000000
abs_addr_of_func_ptr EQU 0x00000600 + $$

call [abs_addr_of_func_ptr]
© www.soinside.com 2019 - 2024. All rights reserved.