nasm segfault macos莫哈韦沙漠10.14.1

时间:2019-03-10 12:52:07

标签: assembly printf nasm macos-mojave

我最近更新了操作系统,现在使用的是Mojave 10.14.1。我也更新了Xcode,从而在链接时成功删除了我的警告。 但是我仍然不知道为什么现在带有NASM x86_64的简单printf程序总是在执行结束时出现段错误... 这是我的代码:

  section .data
    str db "Hello World", 10

section .text
    global start
    global _main
    extern _printf

start:
    call _main
    ret

_main:
    push    rbp
    sub rsp, rbp
    sub rsp, 16
    lea rdi, [rel str]
    call    _printf
    xor rax, rax
    leave
    ret

Hello World消息总是按预期方式输出到标准输出,但是此后它给我一个段错误... 这是我的编辑行

nasm -fmacho64 hello.s -o hello.o
ld hello.o -macosx_version_min 10.12 -lSystem

使用lldb,我无法真正理解问题,但是我明白了:

thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
    frame #0: 0x0000000000001fdc a.out`main + 47
a.out`main:
->  0x1fdc <+47>: leave
    0x1fdd <+48>: retq

a.out`printf:
    0x1fde <+0>:  jmpq   *0x2c(%rip)               ; (void *)0x00007fff750f48ec: printf
    0x1fe4:       leaq   0x1d(%rip), %r11          ; (void *)0x0000000000087e80: initialPoolContent + 624
Target 1: (a.out) stopped.

如果有人知道如何解决这个问题,那将是很大的帮助! 谢谢!

0 个答案:

没有答案