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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:55:57