`zsh:在我的苹果硅 mac 上运行我的 arm64 程序集时无效的系统调用:./hello`

问题描述 投票:0回答:1
我正在我的 M2 mac 上学习使用 arm64 架构进行汇编。我的 hello world 代码(在文件 hello.s 中)。 hello.s(顺便说一句:为了便于阅读,我删除了注释):

.global _start _start: mov x0, #1 ldr x1, msg mov x2, #13 mov x16, #4 svc #0x80 mov x0, #0 mov x16, #1 svc #0x80 .data msg: .ascii"Hello, world!\n"
Hello.s 使用 

as hello.s -o hello.o

 完美组装,我还尝试将其重新键入为 
as -arch arm64 -o hello.o hello.s
,它返回一个名为 hello.o 的目标文件。然后我链接目标文件如下:
ld -o hello hello.o -lSystem -syslibroot
xcrun -sdk macosx --show-sdk-path
-e _start -arch arm64
它返回一个可执行文件:hello
但是当我使用 
./hello
 运行文件时出现错误
我收到错误消息:
zsh: invalid system call ./hello

我尝试将汇编文件中的代码更改为我在 Youtube 视频中看到的

.global _start _start: mov x0, #1 ldr x1, =msg mov x2, #14 mov x8, #64 svc #0 mov x0, #0 mov x8, #93 svc #0 .data msg: .ascii"Hello, world!\n"
这仍然可以成功组装和链接,但给出了相同的运行时错误。

我也尝试更改链接调用,但这并没有做任何事情来修复它(我没有尝试所有可能的链接,主要是因为我是汇编新手并且不理解所有链接,所以这仍然是可能是错误)。

如果您需要更多信息,请告诉我。

编辑: 我最近尝试在不同的 shell 中进行组装,结果发现我有一个来自

Bad system call: 12

 命令的 
sh-3.2$ ./hello
 

macos assembly runtime-error arm64 apple-silicon
1个回答
0
投票
HelloWorld.c:

.global _start .align 4 _start: mov X0, #1 adrp X1, helloworld@page add X1, X1, helloworld@pageoff mov X2, #13 mov X16, #4 svc #0x80 mov X0, #0 mov X16, #1 svc #0x80 .data helloworld: .ascii "Hello World!\n"
随后:

cc -c HelloWorld.s ld -o HelloWorld HelloWorld.o -e _start ./HelloWorld
它的文档很少,但是当标签位于不同的代码部分时,

ldr <reg>,=<label>

在MacOS上不起作用。您必须使用 adrp/add。

© www.soinside.com 2019 - 2024. All rights reserved.