NASM报symbol rip is undefined错误 如何使用RIP相对寻址LEA指令
NASM实现RIP相对偏移加立即数的方案
NASM的RIP相对寻址语法和GAS设计不同,不需要显式写出rip寄存器,而是通过rel关键字标识寻址类型,具体实现方案如下:
- 要实现
lea rax, [rip + 0x1020304]的等价效果,直接写如下代码即可:
其中lea rax, [rel $ + 0x1020304]$指代当前指令的地址,NASM会自动将表达式转换为符合x86-64规范的RIP相对寻址编码,运行效果和GAS的原写法完全一致。 - 针对符号的RIP相对寻址,直接在寻址表达式前加
rel修饰即可,例如获取全局变量my_buf的地址可以写:lea rax, [rel my_buf] - 如果希望当前汇编文件默认优先使用RIP相对寻址,可以在文件开头添加伪指令:
配置后直接写default rellea rax, [my_buf]就会自动使用RIP相对寻址,不需要每次都额外加rel关键字。
注意:RIP相对寻址是x86-64架构独有的寻址模式,32位汇编模式下无法使用。
内容的提问来源于stack exchange,提问作者phip1611
相关产品推荐
相关产品推荐

