我正在为 x86-64 上的 macOS 编写一个编译器,但是当我将目标文件链接在一起时,ld说
ld: dynamic main executables must link with libSystem.dylib for inferred architecture x86_64
Run Code Online (Sandbox Code Playgroud)
但由于 libSystem 包含 libc,我不想使用它(它会给我很多重复项)。我该如何解决这个问题?
我想知道ret从程序的入口点返回是否合法.
NASM示例:
section .text
global _start
_start:
ret
; Linux: nasm -f elf64 foo.asm -o foo.o && ld foo.o
; OS X: nasm -f macho64 foo.asm -o foo.o && ld foo.o -lc -macosx_version_min 10.12.0 -e _start -o foo
Run Code Online (Sandbox Code Playgroud)
ret 从堆栈中弹出一个返回地址并跳转到它.
但是堆栈的顶部字节是程序入口点的有效返回地址,还是我必须调用exit?
此外,上面的程序不会在OS X上发生段错误.它在哪里返回?