我希望 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 的相对调用。但它似乎不想这样做(或者至少我还没有找到一种方法来告诉它)。我该怎么做?
解决方法:
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]