错误格式不支持 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 内存中。事实上,除非特别配置,否则它永远不会这样做。
我正在 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 内存中。事实上,除非特别配置,否则它永远不会这样做。