【问题标题】:Error format doest not support 32-bit absolute addresses [duplicate]错误格式不支持 32 位绝对地址 [重复]
【发布时间】:2020-02-18 12:17:16
【问题描述】:

我正在使用最新版本的 catalina 的 Mac 上 ASM x86-64 中的一个项目。当我尝试编译它时,我得到了错误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

【问题讨论】:

标签: macos assembly x86-64 mach-o


【解决方案1】:

在大多数立即操作数中只有 32 位空间。 __zpair 是一个 64 位地址,可能不适合,这就是汇编程序拒绝此代码的原因。使用

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

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


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

【讨论】:

  • 更重要的是,Mach-O 没有针对 32 位绝对地址的重定位,因此 NASM 甚至无法告诉链接器尝试这样做。
猜你喜欢
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2018-04-28
相关资源
最近更新 更多