Mach-O 64位格式不支持32位绝对地址,不能将字节放入resb缓冲区

时间:2017-06-25 20:18:03

标签: macos assembly nasm x86-64 mach-o

首先我在OS X(x86-64集)上,我使用nasm。 我正在关注asm的教程,我正在编写一个函数来反转字符串。 我的问题是我不能把字节放在我的resb缓冲区中。 我有Mach-O 64-bit format does not support 32-bit absolute addresses错误。我做了一些研究,尝试过很多东西(比如lea,或者首先进入寄存器)似乎无法解决我的问题。

下面是我的代码,我的问题是:mov [output + rdi], eax(我正在尝试将输入db缓冲区的反向字符串写入输出resb 12缓冲区)reverseStr label

section .data
    nl db 0xa
    input db "Hello world!"

section .bss
    output resb 12

section .text
    global start
    global _main

start:
    jmp _main
    ret

_main:
    push rbp
    mov rbp, rsp
    mov rsi, input
    xor rcx, rcx
    cld
    mov rdi, $ + 15
    call calculateStrLength
    xor rax, rax
    xor rdi, rdi
    jmp reverseStr

calculateStrLength:
    cmp byte [rsi], 0
    je exit
    lodsb
    push rax
    inc rcx
    jmp calculateStrLength

reverseStr:
    cmp rcx, 0
    ;je printResult
    pop rax
    mov [output + rdi], eax
    dec rcx
    inc rdi
    jmp reverseStr

0 个答案:

没有答案