You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NASM中强制生成指向固定偏移的RIP相对寻址访问指令

NASM生成指定固定偏移的RIP相对寻址指令的方法

报错absolute address can not be RIP-relative的核心原因是:直接写[rel 0x1000]时,NASM会将0x1000识别为绝对内存地址,而非相对于插桩代码基址的偏移,自然无法生成合法的RIP相对寻址指令。

方法1:基于代码段起始标签计算(最稳妥)

直接将目标地址声明为相对于代码段起始标签instrument的偏移,NASM会自动计算RIP所需的立即数偏移,不需要手动计算指令长度:

; This is offset 0 of my assembly file
instrument:
    mov rax, qword [rel (instrument + 0x1000)]

如果要适配不同的data_offset,可以用equ定义常量,修改更方便:

data_offset equ 0x1000
instrument:
    mov rax, qword [rel (instrument + data_offset)]

方法2:基于段起始符$$计算

如果不想硬编码标签名,可以用NASM内置的$$关键字,代表当前段的起始地址(和示例中的instrument地址完全一致):

instrument:
    mov rax, qword [rel ($$ + 0x1000)]

效果验证

用上述代码执行编译命令nasm -f elf64 -o instrument.o instrument.asm后,反汇编可以得到你需要的目标指令:

0:  48 8b 05 f9 0f 00 00    mov    rax, QWORD PTR [rip+0xff9]    # 0x1000

内容的提问来源于stack exchange,提问作者janw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:45:04