错误格式不支持 32 位绝对地址

Error format doest not support 32-bit absolute addresses

我正在 ASM x86-64 中使用最新版本的 catalina 在 mac 上进行一个项目。当我尝试编译它时,出现错误 error: Macho-O 64-bit format doest not support 32-bit absolute adresses。当我尝试在堆栈框架中移动地址时,我得到了这个。

示例:

my_fnc:
    push rbp
    mov rbp, rsp
    sub rsp, 64
    mov qword [rbp - 8], __zpair
....
....
....

section .rodata

__zpair:
    db "pair", 0

大多数立即操作数中只有 space 用于 32 位。 __zpair,作为 64 位地址,可能不适合,这就是汇编器拒绝此代码的原因。使用

lea rax, [rel __zpair]  ; load the address of __zpair
mov [rbp - 8], rax      ; write address to stack

首先使用rip-相对寻址方式加载地址,然后将其写入栈帧。


† 与其他平台相反,macOS 不保证您的可执行文件会加载到前 2 GB 内存中。事实上,除非特别配置,否则它永远不会这样做。