如何在OS X中构建x64汇编程序?

Mic*_*ris 2 macos 64-bit assembly build-process

我正试图在我的Leopard MacBook Pro上用x64汇编构建Hello World.它汇总很好,但是当我尝试链接它时我得到了这个错误:ld:symbol dyld_stub_binding_helper未定义(通常在crt1.o/dylib1.o/bundle1.o中)用于推断架构x86_64

我用ld -o hello64 hello64.o -lc加载它

我的装配工是Yasm.

编辑:据我所知,与32位代码不同,你必须自己提供存根助手,因为我不知道64位存根助手是如何工作的,我会像Bastien所说的那样做并拥有GCC链接它,因为它包含它自己的存根助手.

卫生署!劳工处会自动包含crt1.o如果我的程序集的入口点已经_main代替_start.

Meh*_*ari 5

您尚未指定汇编程序.就个人而言,我在使用yasm汇编程序之前已经这样做了(并且在这方面写过一篇博文,但由于我的博客已经关闭了很长时间,我无法发布链接).基本上,一个问候世界将是:

SECTION .data
   hello db 'hello, world', 10
   hellolen equ $ - hello

SECTION .text
   global start

start:
   mov rax, 0x2000004    ; sys_write
   mov rdi, 1            ; stdout 
   mov rsi, qword hello  ; string
   mov rdx, hellolen     ; length
   syscall
   mov rax, 0x2000001    ; sys_exit
   xor rdi, rdi          ; exit code
   syscall
Run Code Online (Sandbox Code Playgroud)

组装:

yasm -f macho64 file.asm
ld a.o
./a.out
Run Code Online (Sandbox Code Playgroud)