assembly 如何在没有库的情况下在macOS上编译或构建汇编程序?

wn9m85ua  于 2023-10-19  发布在  Mac
关注(0)|答案(1)|浏览(143)

问题是我在documents/assembly中有一个文件系统,它是这样的:
test.s(来自Linux教程,使用Linux系统调用号):

.global _start

    .text

_start:

    mov $60, %rax # exit
    mov $0, %rdi # return code 0
    syscall

compile.bash:

as -o test.o test.s && ld -e _start -o test.s test.o && chmod 777 test.o && (./test ; echo $?)

但是当我尝试运行compile.bash时,我得到:

ld: dynamic executables or dylibs must link with libSystem.dylib for architecture x86_64

当我尝试运行test.o:
bash:./test.o:无法执行二进制文件
我用的是gnu汇编,但是在教程中我用的不是gcc.
我试着改变命令,但发生的是,它给了很多错误.我使用的是macOS Monteray版本12.5.1(21 G83)。我期望的是在运行命令时打印0,但它没有.
(编者按:x86-64 macOS使用与x86-64 Linux不同的系统调用号,因此将这些指令构建到可执行文件中会运行,但会因segfault或总线错误而退出,但这是一个单独的问题。对于未来寻找教程的读者,请确保它与您的操作系统以及CPU架构和模式(32 vs. 64位)。

pepwfjgg

pepwfjgg1#

ld:动态可执行文件或dylib必须与x86_64体系结构的libSystem.dylib链接
试试这些行:

as test.s -o test.o 
ld test.o -o test -macosx_version_min 13.0 -L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib -lSystem

相关问题