我正在尝试在 2020 intel macbook pro 上的 macos sonoma 14.3 上编写程序集,但它一直给我这个错误。 我的代码:
section .data
msg: db "hello", 10
section .text
global _main
_main:
mov rax, 0x02000004
mov rdi, 1
mov rsi, msg
mov rdx, 6
syscall
mov rax, 0x02000001
xor rdi, rdi
syscall
我在终端中运行这些。
nasm -f macho64 test.asm
ld test.o -o test -macos_version_min 14.3 -lSystem
我安装了命令行工具,当我再次尝试时: xcode-select:注意:命令行工具已安装。使用系统设置中的“软件更新”或softwareupdate命令行界面来安装更新(并且软件更新中没有更新)
我尝试将多个资源添加到路径中:
我的.zshrc:
export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
我的.z个人资料:
export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) export LIBRARY_PATH="$LIBRARY_PATH:$SDKROOT/usr/lib"
我的.个人资料:
export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) export LIBRARY_PATH="$LIBRARY_PATH:$SDKROOT/usr/lib"
在我的 .bash_profile 中我有两个命令
我安装了xcode。我不知道我是否需要其他东西,在互联网上没有找到任何其他想法
我找到了一种方法,只需进行一些小更改即可使您发布的代码正常工作。
对于每次编译和链接尝试,我都使用此命令,其中源代码位于名为
so_hello.asm
: 的文件中
nasm -f macho64 so_hello.asm && ld -macos_version_min 14.0 -o so_hello so_hello.o
从上面发布的代码开始,我收到了各种警告,如果我忽略它们并尝试运行链接器输出,我会收到总线错误。
使用我从 github gist comment 中拼凑出来的信息以及 nasm 教程中标题为 在 macOS 上使用 NASM 的部分,我决定让您的代码如下所示:
default rel ; add this line
section .data
msg: db "hello", 10
section .text
global _main
_main:
mov rax, 0x02000004
mov rdi, 1
lea rsi, [msg] ;always use lea to get your addresses
mov rdx, 6
syscall
mov rax, 0x02000001
xor rdi, rdi
syscall
现在工作得很好:
nasm -f macho64 so_hello.asm && ld -macos_version_min 14.0 -o so_hello so_hello.o
ld: warning: no platform load command found ..., assuming: macOS
./so_hello
hello
此外,如果我先这样做在英特尔架构下运行它,这也是可行的:
arch -x86_64 zsh
请注意,我是在 M3 上组装和链接
x86_64
代码的新手。我真的在寻找如何组装、链接和运行基于 Racket 的教程的编译器输出,该教程不直接支持 aarch64
仅供参考版本信息,以防您的输出有所不同: