在macOS Xcode的clang中使用.intel_syntax noprefix时jmp 0x1234编译失败如何解决?
macOS Xcode clang环境下Intel语法的正确jmp写法
在x86_64的Intel语法中,直接写jmp 0x1234会被clang(gas汇编器)解析为试图跳转到绝对地址0x1234,但64位模式下不存在直接跳转到绝对立即数的jmp指令,因此触发编译错误。而原AT&T语法中的jmp 0x1234会被自动处理为RIP相对的相对跳转(基于下一条指令的RIP计算偏移)。
根据你的需求,有两种正确写法:
1. 和原AT&T代码行为一致(跳转到下一条指令RIP偏移0x1234的位置)
明确指定相对跳转类型,使用rel32前缀:
.intel_syntax noprefix .text .global _func _func: jmp rel32 0x1234 .align 4
2. 跳转到当前jmp指令地址偏移0x1234的位置
使用汇编器的当前地址符号.直接计算目标地址,汇编器会自动转换为合法的RIP相对偏移:
.intel_syntax noprefix .text .global _func _func: jmp . + 0x1234 .align 4
内容的提问来源于stack exchange,提问作者user12280249
相关产品推荐
相关产品推荐

